我有一个带有“|”的 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