awkを使用して特定の列のみを処理し、区切りテキストファイルのヘッダーとフッターを無視する方法は?

awkを使用して特定の列のみを処理し、区切りテキストファイルのヘッダーとフッターを無視する方法は?

次の入力テキストファイルがありますtext.txt

Header
Column1|Column2|Column3
C11|C12|C13
C21|C22|C23
C31|C32|C33
Footer

私の出力は次のようになります

Column1|Column3
C11|C13
C21|C23
C31|C33

現在私が使用している命令は

awk -F "|" 'BEGIN{NR > 1; OFS = "|"}{print $1, $3}' text.txt > text2.txt

NR > 1Headerが最初の行なので無視するとどうでしょうか?

また、最後の行をどのように無視できますか?

答え1

awk -F '|' -vOFS='|' '/^Header|^Footer/ {next} ; {print $1, $3}' text.txt

一致する行をスキップする^Headerか、^Footer他のすべての行の列1と3を印刷します。

フィールド区切り記号(FS)と出力フィールド区切り記号(OFS)の両方が設定されます|

答え2

たぶん、次のようなものを使用できます(a.txt入力を含む)。

 head --lines=-1 a.txt | tail --lines=+2 | awk -F "|" '{print $1"|"$2}'

head --lines=-1最後の行を除くすべてを印刷します。
tail --lines=+2すべてを印刷しますが、2行目から始めて
awk -F "|" '{print $1"|"$3}'1列目と3列目を取得します。

結果:

Column1|Column3
C11|C13
C21|C23
C31|C33

関連情報