如何在保持行顺序的同时在文本文件上使用grep和awk命令?

时间:2017-06-19 23:40:23

标签: bash shell unix awk grep

我有一个看起来像这样的文本文件:

domain name pointer www.google.com
domain name pointer www.gmail.com
NA
domain name pointer www.facebook.com
NA
NA
NA
domain name pointer www.starbucks.com

如果我使用这些命令:

grep "pointer" inputfile.txt | awk '{print $4}'

grep "NA" inputfile.txt | awk '{print $1}'

我能得到:

www.google.com
www.gmail.com
www.facebook.com
www.starbucks.com
NA
NA
NA
NA

但是我希望'NA'和URLS保持与原始文本文件相同的顺序。

2 个答案:

答案 0 :(得分:2)

没有必要使用grep,因为awk可以单独进行模式匹配。然后,您不需要对文件使用多次传递:

awk '/pointer/ {print $4} 
     /NA/ {print $1}' inputfile.txt

答案 1 :(得分:1)

如果其中一个不是你所需要的:

$ awk '{print $NF}' file
www.google.com
www.gmail.com
NA
www.facebook.com
NA
NA
NA
www.starbucks.com

$ sed 's/.* //' file
www.google.com
www.gmail.com
NA
www.facebook.com
NA
NA
NA
www.starbucks.com

然后编辑您的问题以阐明您的要求,并提供更具真实代表性的样本输入/输出。