文字列をgrepしますが、最初の行は含めません。

文字列をgrepしますが、最初の行は含めません。

最初の行を読み取らずに特定の文字列に対して見つかった行を削除するgrep -vコマンドが必要です。

注文ID、タイムスタンプ変更、条件、ステータス
OD10,2017-04-25 07:21:13.069,A,D
OD11,2017-04-25 07:21:13.069,A,D
注文ID、タイムスタンプ変更、条件、ステータス
OD14,2017-04-26 07:21:13.069,A,D
OD15,2017-04-26 07:21:13.069,A,D
注文ID、タイムスタンプ変更、条件、ステータス
OD16,2017-04-27 07:21:13.069,A,D
OD17,2017-04-27 07:21:13.069,A,D

期待する:

注文ID、タイムスタンプ変更、条件、ステータス
OD10,2017-04-25 07:21:13.069,A,D
OD11,2017-04-25 07:21:13.069,A,D
OD14,2017-04-26 07:21:13.069,A,D
OD15,2017-04-26 07:21:13.069,A,D
OD16,2017-04-27 07:21:13.069,A,D
OD17,2017-04-27 07:21:13.069,A,D

元のファイルに触れることなく別のファイルに出力する必要があります。

答え1

$ awk 'NR==1 {print; next;} !/orderID/' input.txt > output.txt

より短い構文:

$ awk 'NR==1 || !/orderID/' input.txt > output.txt

答え2

シェルからファイルを複合コマンドにリダイレクトできます。ここで最初の行を読み取り、印刷してから、残りのストリームからそのテキストを除外します。

{ read -r header; echo "$header"; grep -Fv "$header"; } < file

この方法では、ヘッダーを除外するためにヘッダーの内容を知る必要はありません。

これに対応するawkは次のとおりです。

awk 'NR==1 {header = $0; print} $0 == header {next} {print}' file

関連情報