区切り文字として"|"を含む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
最後の列ではなく特定の列をテストするには、$n
nが列番号の場合を使用します。この例では、$NF
は同じです。$7
$6
fffffff
答え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