2017-06-19 55 views
1

这里是我的文件(TEMP.DAT):SED/AWK拷贝行数X行数y

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
wsuo 
zrnt 

从这个文件,我想第2行的(全部内容)复制到9号线,意义得到这个新文件:

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

怎么样'AWK 'NR> = 2 && NR <= 9' inputfile' –

+1

的数字是有因为您在打印中包含“NR” – Thor

+0

您是否只希望稍后在文件的早期打印一行(例如,打印行2而不是行9)或者您是否有时想打印行f rom稍后在文件中(例如,打印第9行而不是第2行)?后者需要与前者不同的解决方案。 –

回答

1

使用此:

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

你可以在你的起源print语句与额外的空间NR" "省略print NR" "$0的数字。

+0

谢谢约翰高飞。它现在有效。非常感谢 !!! – rogwar

+0

@rogwar欢迎您。如果这个答案是正确的,并且你想帮助社区找到正确答案,请将此答案标记为正确答案。 –

0

The Standard Editor有这样的命令,line-from t line-to,如:

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

在此之后outfile包含:

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
efgh 
zrnt 
2

随着sed你可以节省2号线在保持缓冲器以及在替代它第9行,例如

sed '2h; 9x' infile 

同样与awk

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

输出在这两种情况下:

abcd 
efgh 
ijkl 
mnop 
qrst 
uvwx 
yzzp 
aprd 
efgh 
zrnt