sed / awk将行号x复制到行号y

时间:2017-06-19 12:09:54

标签: awk sed

这是我的文件(temp.dat):

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帮助我。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用此:

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

您可以在原始打印语句print NR" "$0中省略带有额外空格NR" "的数字。

答案 2 :(得分: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