最後の列だけをgrepする方法は?

最後の列だけをgrepする方法は?

区切り文字として"|"を含むsometextfile.txtがあります。

grep最後の列の値に「apple」という単語だけを含めたいと思います。どうすればいいですか?

column1|column2|column3|column4|column5|column6|column7
aaaaaaa|bbbbbbb|ccccccc|ddddddd|eeeeeee|fffffff|apple

行全体を Newfile.txt にインポートします。

答え1

awk -F'|' '$NF == "apple" {print}'  sometextfile.txt  > Newfile.txt

フィールド区切り文字を使用して、各行の|最後のsometextfile.txtフィールド($NF)が「apple」と等しい場合、行全体が印刷されます。出力を次にリダイレクトNewfile.txt

最後の列ではなく特定の列をテストするには、$nnが列番号の場合を使用します。この例では、$NFは同じです。$7$6fffffff

答え2

元の問題はgrep解決策を要求した。最後の列を見つけるには、[^|]+行末まで区切り文字なしで単語を検索してください$

grep -Eo "[^|]+$" infile.txt

出力:

column7
apple

答え3

簡単な解決策は、式を最後に固定することです$

grep "|apple$" sometextfile.txt > Newfile.txt

行が見つからない場合の一般的な原因は、DOS形式のテキストファイルの行の末尾にキャリッジリターンがあるためです。最後に印刷できない文字を許可することで、この状況を捉えることができます(正規表現でサポートされていると仮定\s)。

grep "|apple\s*$" sometextfile.txt > Newfile.txt

答え4

別のawk方法:

awk -F\| '$NF ~ /^apple$/' infile.txt >toOutput.txt

関連情報