sed/awk将行号x复制到行号y
这是我的文件(临时数据): 从这个文件中,我想将第2行的(全部内容)复制到第9行,这意味着获得这个新文件: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
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