sed
ファイルの複数行を印刷するオネライナーがあります。
sed -n '10,20p' file.txt
上記のコードは、file.txtの10行から20行まで印刷します。
しかし、行番号をどのように印刷できますか?
答え1
努力するawk
:
awk 'FNR==10,FNR==20 {print FNR ":" $0}' file.txt
これにより、行番号、コロン、および10〜20の範囲の行が印刷されます。
または20行目以降の読み取りを停止します。
awk 'FNR >= 10 {print FNR ":" $0}; FNR == 20 {exit}' file.txt
複数のファイルを処理し、実装がawk
このディレクティブをnextfile
サポートしている場合:
awk -v OFS=: 'FNR >= 10 {print FILENAME, FNR, $0}; FNR == 20 {nextfile}' ./*.txt
(現在のファイル名もここに印刷されます。)
答え2
答え3
のみ使用してくださいsed
。
sed -n '10,20{=;p}' file.txt | sed '{N; s/\n/ /}'
N;
sed
パターン空間に次の行を追加するように指示するので、sed
これらの2行が処理されています。s/\n/ /
改行文字をスペースに置き換えて、2行を「マージ」します。
源泉:
記述子アラ・アリ(ソース2)
答え4
$ < file grep -ne '^' | sed -ne '10,20p'
$ < file sed -e '10,20!d;=;20q' | paste -d: - -
Not so UUOC:
$ cat -n file | sed -nEe '10,20s/^\s*(\S+)\t/\1:/p'
$ perl -lne 's/^/$.:/;
print if 10..20;
last if 20..20;
' file