如何仅 grep 最后一列?

如何仅 grep 最后一列?

我有一个带有“|”的 sometextfile.txt作为分隔符。

我想要grep最后一列中仅包含单词“apple”的值。我该怎么做?

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

并将整行 grep 到 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

相关内容