onefish
onechicken
twofish
twochicken
twocows
threechicken
如果我想grep包含“two”的行怎么办,但我只想要第二场比赛。所以我希望结果“twochicken”。
答案 0 :(得分:27)
试试这个:
awk '/two/{i++}i==2' file
包含您的数据:
kent$ echo "onefish
onechicken
twofish
twochicken
twocows
threechicken"|awk '/two/{i++}i==2'
twochicken
注意:如果您的文件很大,请执行以下操作:
awk '/two/{i++}i==2{print; exit}' file
答案 1 :(得分:19)
grep -m2 "two" in-file.txt | tail -n1
在第二场比赛后停止,然后打印第二行。
答案 2 :(得分:3)
grep和sed可用于过滤行号。
测试文件:
addq $16, %rsp
获取所需的行:
onefish
onechicken
twofish
twochicken
threechicken
twocows
答案 3 :(得分:1)
如果单词(此处为单词== 2)在一行中重复多次,&如果要打印该行,请使用以下内容:
word=two
n=2
line=`grep -m$n $word -o -n MyFile | sed -n $n's/:.*//p'`
awk 'FNR=='$line'{print; exit}' MyFile
e.g。 对于以下输入:
onefish
onechicken
twotwofish
twochicken
twocows
threechicken
它将打印twotwofish
,而不是twochicken
。
这可能不是user1787038想要的,但添加回答我自己的评论。
答案 4 :(得分:1)
应该注意的是,如果交换threechicken
和twocows
行,又称:
onefish
onechicken
twofish
twochicken
threechicken
twocows
然后肯特的第一个回复(awk '/two/{i++}i==2' file
)将产生输出:
twochicken
threechicken
因为再次出现匹配会增加计数器。他的最后回复:awk '/two/{i++}i==2{print; exit}' file
避免了这个问题。