私はプログラムを100回繰り返すbashスクリプトを書いた。各反復の出力には14行がありますが、残りの分析には14行(最後の行とも呼ばれます)のみが必要です。
同様の質問に対する回答を読みましたが、すべて出力に名前付き行があるとします。一方、出力の10行目は次のとおりです。
1 0 0.005 63.01
grep
付ける名前がありません。
私は10行を取り、bashスクリプトで実行された各繰り返しに対して、total_output.txt
次のように他のファイル()の一番下に出力を追加したいと思います。
left right p-value ratio
1 0 0.005 63.01
1 0 0.02 67.23
そして、各繰り返しごとに続きます。好ましくは、これは同じbashスクリプト内にあり、各反復に対するプログラム出力を保存する必要はない。
私はLinuxとbashスクリプトに初めて触れました。同様の質問に対する答えを私の問題に適用する方法を本当に理解することはできません。
答え1
以下を使用すると、tail
最後の行のみを取得できます。total_output.txt
your_program | tail -n 1 >> total_output.txt
コマンドは3つの部分で構成されています。
your_program
プログラムを実行し、繰り返し内容を出力します。| tail -n 1
この出力の最後の行のみを取得します(接頭辞でパイプが付く)。>> total_output.txt
指定されたファイルに最後の行を追加します(追加の出力リダイレクタが前に付けられます)
答え2
編集内容に応じて、常に以下が必要です。最後(元のように)特定の行番号ではなく、出力行です。
固定長出力の場合、元の回答は無効化されませんが、awk
行数が可変で最後の行のみを選択したい場合でも、次のようになります。
your_program | awk 'END{print}' >> total_output.txt
これは、ファイルの終わり(または入力の終わり)の「現在の」行がまだ読み取られた最後の行であるという事実を利用します。
元の答え
grep
awk
代わりにこの目的に使用できます。
your_program | awk 'NR==14' >> total_output.txt
すると、 の出力がyour_program
にのみパイプされ、awk
14行だけ印刷されます。出力は目的のファイルにリダイレクトされます(追加モードで)。
出力が14行を超えて効率のためにトリミングするには、次のように変更します。
your_program | awk 'NR==14{print;exit}' >> total_output.txt
この行に達するとすぐにプロセスが終了しますawk
。
ノート(あなたが出力を書いたので「10行くらい」)出力に実際に少ないいいですね。ファイルに何も追加されません!