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

sed/awk将行号x复制到行号y,awk,sed,Awk,Sed,这是我的文件(临时数据): 从这个文件中,我想将第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

这是我的文件(临时数据):

从这个文件中,我想将第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吗。

使用此:

awk '{if (NR==2) s=$0;if (NR==9) print s;print $0}' temp.dat
您可以在原始打印语句
print NR”“$0
中省略带有额外空格的数字
NR”“

有一个命令,从t行到
行,例如:

echo '#\
9d
2t8
w outfile
q
#' | ed infile
在此之后,
outfile
包含:

abcd
efgh
ijkl
mnop
qrst
uvwx
yzzp
aprd
efgh
zrnt

使用
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

awk'NR>=2&&NR因为在打印中包含了
NR
,所以有数字,您是只想稍后打印文件中较早的一行(例如,打印第2行而不是第9行),还是有时想更早打印文件中较晚的一行(例如,打印第9行而不是第2行)?后者需要与前者不同的解决方案。@rogwar欢迎您。如果这个答案是正确的,并且你想帮助社区找到正确的答案,请将这个答案标记为正确答案。
abcd
efgh
ijkl
mnop
qrst
uvwx
yzzp
aprd
efgh
zrnt