2017-06-19 14 views
1

がここに私のファイル(TEMP.DAT)である数yをラインに9行目、この新しいファイル取得の意味:ここでSED/awkのコピーライン数xが

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
efgh 
zrnt 

は私の実装です

awk '{if (NR==2) s=$0;if (NR==9) print s;print NR" "$0}' temp.dat > new.dat: 

出力

1  abcd 
2  efgh 
3  ijkl 
4  mnop 
5  qrst 
6  uvwx 
7  yzzp 
8  aprd 
efgh 
9  wsuo 
10  zrnt 

この番号が表示される理由はわかりません。誰かがawkやsedで私を助けることができますか?

+1

方法 –

+1

番号があるinputfile'あなたの印刷に 'NR'を含めるので、 – Thor

+0

後でファイルの前の行を印刷したいだけですか?(例えば、9行の代わりに2行を印刷します) ROMの後ろにある(例えば、。行2ではなく行9を印刷します)?後者は前者とは異なる解決策を必要とする。 –

答えて

1

使用この:

awk '{if (NR==2) s=$0;if (NR==9) print s;print $0}' temp.dat 

あなたは余分なスペースNR" "であなたの原点print文でprint NR" "$0番号を省略することができます。

+0

John Goofyありがとうございました。それは今働く。どうもありがとう !!! – rogwar

+0

@rogwarよろしくお願いします。この回答が正しい場合、コミュニティが正解を見つけるのを手助けしたいのであれば、この回答を正しいものとしてマークしてください。 –

0

The Standard Editorは、例えば、このためのコマンドがありline-from t line-to

echo '#\ 
9d 
2t8 
w outfile 
q 
#' | ed infile 

このoutfileが含まれていた後:sed

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
efgh 
zrnt 
2

を使用すると、ホールド・バッファに行2を保存して、上でそれを置き換えることができ9行目、例えば両方の場合においてawk

awk 'NR==2 { s=$0 } NR==9 { $0=s } 1' infile 

出力と同様

sed '2h; 9x' infile 

: `AWK 'NR> = 2 && NR <= 9' 約

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
efgh 
zrnt