Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何将特定列下移一行?_Bash_Shell_Awk_Sed - Fatal编程技术网

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行要移动
,那么您需要编辑问题中的示例输入/输出,以更能代表您的真实数据。是的,您是对的,但我想在最后写下点,但他们并不总是让我这么做。很抱歉