这是我的文件(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帮助我。
答案 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