我有一个名为file1的文件,如下所示。
1 intst
2 1.0
3 12.591870 0.000000 0.000000
4 0.000000 12.591870 0.000000
5 0.000000 0.000000 12.591870
6 Ba Zr Al O
7 27 26 1 81
8 direct
9 0.166667 0.166666 0.167762 Ba
10 0.166667 0.166667 0.500000 Ba #Line to be moved
11 0.166666 0.166667 0.832238 Ba
...
...
60 0.666668 0.666666 0.329117 Zr
61 0.666665 0.666667 0.670884 Zr
62 0.666667 0.666667 1.000000 Al #Moved line to be inserted below this line
63 0.166667 0.999071 0.999999 O我需要复制line- 10的内容,并将其移动到line-62下面,方法是创建一条新行,以便新文件显示为
1 intst
2 1.0
3 12.591870 0.000000 0.000000
4 0.000000 12.591870 0.000000
5 0.000000 0.000000 12.591870
6 Ba Zr Al O
7 27 26 1 81
8 direct
9 0.166667 0.166666 0.167762 Ba
10 0.166666 0.166667 0.832238 Ba #Original line- 11
...
...
59 0.666668 0.666666 0.329117 Zr
60 0.666665 0.666667 0.670884 Zr
61 0.666667 0.666667 1.000000 Al
62 0.166667 0.166667 0.500000 Ba #Original line-10
63 0.166667 0.999071 0.999999 O使用sed我分别知道如何删除行
sed -i.bkp -e '10d' file并插入一行
sed -i '10i <string>'file1但我不知道如何复制一行的内容并将其移动到另一行
发布于 2016-05-10 13:15:40
您可以使用这个sed
sed '10{h;D}; 62G' file根据@Benjamin的评论,您也可以使用d。
sed '10{h;d}; 62G' file使用-i.bak进行就地编辑.
这里,
10 and 62 -线号h -复制模式空间以保持空间。这将节省line 10的空间。G -将保持空间附加到模式空间。这将将line 10附加到模式空间。D --删除模式空间中的文本,直到第一行。发布于 2016-05-10 15:04:40
awk:
awk -v n1=10 -v n2=62 '
NR == n1 {line=$0; next}
{print}
NR == n2 {print line}
' file > file.new或受尊敬的人(就地编辑文件)
ed file <<END_ED
# move line 10 after line 62
10m62
# save and quit
w
q
END_EDhttps://stackoverflow.com/questions/37139518
复制相似问题