我想从文件中提取特定行(比如第2行和第4行到第6行),并将它们重定向到命令行中的文件/将其传递给另一个程序。
哪种工具可以最快/最干净(sed,awk,perl,shell)?
答案 0 :(得分:6)
Sed有一个很好的方法:
sed -ne '2p' -e '4,6p'
例如:
$ printf '%s\n' {1..100} | sed -ne '2p' -e '4,6p'
2
4
5
6
答案 1 :(得分:4)
使用awk
及其参数NR
。您可以编写条件表达式,例如:
$ cat a
aa
bb
cc
dd
ee
$ awk 'NR==3' a #print line number 3
cc
$ awk 'NR==3, NR==5' a #print from line number 3 up to number 5
cc
dd
ee
$ awk 'NR>2 && NR<7' a #print lines whose number is in the range (2,7)
cc
dd
ee
等
在你的情况下,
$ awk 'NR==2; NR>=4 && NR<=6' a #print line number 2 and from 4 to 6
答案 2 :(得分:4)
awk 'NR==2 || NR>=4 && NR<=6'
或
awk 'NR==2; NR==4,NR==6'
答案 3 :(得分:1)
您只需使用head
和tail
...
例如:
NR=3; cat test.txt | head -n $NR | tail -n -1
从test.txt
中提取第3行;和
NB=2; NR=3; cat test.txt | head -n $(expr $NR \+ $NB) | tail -n -$NB
提取第3至5行。
答案 4 :(得分:1)
使用awk并保持清晰简单:
awk 'NR==2 || (NR>=4 && NR<=6)' file