-1

ファイルから特定の行 (たとえば、2 行目と 4 行目から 6 行目) を抽出し、それらをコマンド ラインのファイルにリダイレクトしたり、別のプログラムにパイプしたりしたいと考えています。

最も速く/最もクリーンな作業を行うツールはどれですか (sed、awk、perl、shell)?

4

5 に答える 5

6

Sed には、これを行う優れた方法があります。

sed -ne '2p' -e '4,6p'

例えば:

$ printf '%s\n' {1..100} | sed -ne '2p' -e '4,6p'
2
4
5
6
于 2013-06-24T15:30:48.430 に答える
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
于 2013-06-24T15:29:21.433 に答える
4
awk 'NR==2 || NR>=4 && NR<=6'

また

awk 'NR==2; NR==4,NR==6'
于 2013-06-24T15:32:38.053 に答える
1

awk を使用し、明確かつシンプルに保ちます。

awk 'NR==2 || (NR>=4 && NR<=6)' file
于 2013-06-24T18:11:52.137 に答える
1

あなたはちょうどheadtail...を使用してそれを行うことができます

例えば:

NR=3; cat test.txt | head -n $NR | tail -n -1

から 3 行目を抽出しtest.txtます。と

NB=2; NR=3; cat test.txt | head -n $(expr $NR \+ $NB) | tail -n -$NB

3行目から5行目を抽出します。

于 2013-06-24T15:50:05.720 に答える