Bash 如何将特定列下移一行?
我有以下文本文件:Bash 如何将特定列下移一行?,bash,shell,awk,sed,Bash,Shell,Awk,Sed,我有以下文本文件: Ca1 2.75766949 2.49500070 0.77962056 Ca2 5.83334907 4.99000000 3.81528863 Ca3 0.00000000 -0.00000000 22.02929701 Ca4 0.81321980 2.4
Ca1
2.75766949 2.49500070 0.77962056
Ca2
5.83334907 4.99000000 3.81528863
Ca3
0.00000000 -0.00000000 22.02929701
Ca4
0.81321980 2.49500070 6.85095669
Ca5
3.88889938 4.99000000 9.88662475
Ca6
6.96457896 2.49500070 12.92229282
Ca7
1.94444969 4.99000000 15.95796089
我想知道“Ca”列是否可以下移1行以获得:
Ca1 2.75766949 2.49500070 0.77962056
Ca2 5.83334907 4.99000000 3.81528863
Ca3 0.00000000 -0.00000000 22.02929701
Ca4 0.81321980 2.49500070 6.85095669
Ca5 3.88889938 4.99000000 9.88662475
Ca6 6.96457896 2.49500070 12.92229282
Ca7 1.94444969 4.99000000 15.95796089
我试了些东西
awk
但是,我没有找到解决办法
提前感谢。使用awk
:
awk 'NR%2!=0{prev=$0;next} {print prev, $0}' yourfile
使用sed
:
sed 'N; s/\n//g' yourfile
使用awk
:
awk 'NR%2!=0{prev=$0;next} {print prev, $0}' yourfile
使用sed
:
sed 'N; s/\n//g' yourfile
此awk单行检查文本(Ca模式)而不是行号以连接行
awk '{printf "%s%s", $0, (/Ca/?"":RS)}' file
如果要检查行号,请将
/Ca/?
更改为NR%2?
此awk单行检查文本(Ca模式)而不是行号以连接行
awk '{printf "%s%s", $0, (/Ca/?"":RS)}' file
$ awk '{ORS=(NF>1?"\n":"")}1' file
Ca1 2.75766949 2.49500070 0.77962056
Ca2 5.83334907 4.99000000 3.81528863
Ca3 0.00000000 -0.00000000 22.02929701
Ca4 0.81321980 2.49500070 6.85095669
Ca5 3.88889938 4.99000000 9.88662475
Ca6 6.96457896 2.49500070 12.92229282
Ca7 1.94444969 4.99000000 15.95796089
$ awk '{ORS=(NF>1?"\n\n":"")}1' file
Ca1 2.75766949 2.49500070 0.77962056
Ca2 5.83334907 4.99000000 3.81528863
Ca3 0.00000000 -0.00000000 22.02929701
Ca4 0.81321980 2.49500070 6.85095669
Ca5 3.88889938 4.99000000 9.88662475
Ca6 6.96457896 2.49500070 12.92229282
Ca7 1.94444969 4.99000000 15.95796089
如果要检查行号,请将
/Ca/?
更改为NR%2?
,中间为空行
$ awk '{ORS=(NF>1?"\n":"")}1' file
Ca1 2.75766949 2.49500070 0.77962056
Ca2 5.83334907 4.99000000 3.81528863
Ca3 0.00000000 -0.00000000 22.02929701
Ca4 0.81321980 2.49500070 6.85095669
Ca5 3.88889938 4.99000000 9.88662475
Ca6 6.96457896 2.49500070 12.92229282
Ca7 1.94444969 4.99000000 15.95796089
$ awk '{ORS=(NF>1?"\n\n":"")}1' file
Ca1 2.75766949 2.49500070 0.77962056
Ca2 5.83334907 4.99000000 3.81528863
Ca3 0.00000000 -0.00000000 22.02929701
Ca4 0.81321980 2.49500070 6.85095669
Ca5 3.88889938 4.99000000 9.88662475
Ca6 6.96457896 2.49500070 12.92229282
Ca7 1.94444969 4.99000000 15.95796089
sed '/^Ca[0-9]/ {N;s/\(\n\)\(.*\)/\2\1/;}' YourFile
威图特
sed '/^Ca[0-9]/ {N;s/\n//;}' YourFile
中间有空行
sed '/^Ca[0-9]/ {N;s/\(\n\)\(.*\)/\2\1/;}' YourFile
威图特
sed '/^Ca[0-9]/ {N;s/\n//;}' YourFile
你真的希望每两行数据之间有一个空行吗?你真的希望每两行数据之间有一个空行吗?很好,但我有不止一行Ca行要移动。这也很好。@git-如果在您的真实数据中
有超过Ca行要移动
,那么您需要编辑问题中的示例输入/输出,以更能代表您的真实数据。是的,您是对的,但我想在最后写下点,但他们并不总是让我这么做。抱歉,很好,但我还有不止一条Ca线要移动。这也很好。@git-如果在您的真实数据中有超过Ca行要移动
,那么您需要编辑问题中的示例输入/输出,以更能代表您的真实数据。是的,您是对的,但我想在最后写下点,但他们并不总是让我这么做。很抱歉