bashの別のファイルに出力の最後の行を追加する

bashの別のファイルに出力の最後の行を追加する

私はプログラムを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

これは、ファイルの終わり(または入力の終わり)の「現在の」行がまだ読み取られた最後の行であるという事実を利用します。


元の答え

grepawk代わりにこの目的に使用できます。

your_program | awk 'NR==14' >> total_output.txt

すると、 の出力がyour_programにのみパイプされ、awk14行だけ印刷されます。出力は目的のファイルにリダイレクトされます(追加モードで)。

出力が14行を超えて効率のためにトリミングするには、次のように変更します。

your_program | awk 'NR==14{print;exit}' >> total_output.txt

この行に達するとすぐにプロセスが終了しますawk

ノート(あなたが出力を書いたので「10行くらい」)出力に実際に少ないいいですね。ファイルに何も追加されません!

関連情報