Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.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
Linux 如何将列输出合并到上一列的行末尾?_Linux_Bash_Awk_Sed - Fatal编程技术网

Linux 如何将列输出合并到上一列的行末尾?

Linux 如何将列输出合并到上一列的行末尾?,linux,bash,awk,sed,Linux,Bash,Awk,Sed,我有一个包含三列的.csv文件,需要将第2列的值与第1列行的末尾合并 .csv文件包含数千行,需要为每行执行此操作 我尝试过使用awk,但我发现很难获得正确的代码 cat file.csv | awk '{print $1, $2}' awk '{if ($2!= " ") {print $1+$2 }}' These of course don't work 样本输入: 用于产生实际输出的命令很简单: cat test.csv [2,4,5,6,2,34,61,32,34,54,34,

我有一个包含三列的.csv文件,需要将第2列的值与第1列行的末尾合并

.csv文件包含数千行,需要为每行执行此操作

我尝试过使用awk,但我发现很难获得正确的代码

cat file.csv | awk '{print $1, $2}' 

awk '{if ($2!= " ") {print $1+$2 }}'

These of course don't work
样本输入:

用于产生实际输出的命令很简单: cat test.csv

[2,4,5,6,2,34,61,32,34,54,34,       22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,       34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,       21]     0.347643
期望输出:

             col1                       col2
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643
您可以尝试:

awk '{printf("%s%s\t%s\n",$1,$2,$3)}' file.cvs
将“逗号后跟一个或多个空格”替换为“逗号”:

将列$1和$2打印为$1(可选地用选项卡分隔):


我只在你不需要的时候看到逗号后面的空格

$: sed -E 's/,\s+/,/' file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643
添加
-i
(在
-E
之后)使其成为就地编辑

$: sed -Ei 's/,\s+/,/' file.csv
$: cat file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643

sed的/*/'文件
?`前面有两个空格*。您向我们显示了实际输出和所需输出,但忘了显示相关的输入。一些答案假设“csv”表示逗号分隔,而另一些则假设“c”表示“字符”而不是“逗号”,并假设字符是空格。所以-您的问题是显示您发布的命令产生输出的输入,以便我们可以帮助您。谢谢,我编辑了它以显示实际输入和所需输出。“csv”是用逗号分隔的。那么
实际输出
实际上就是
样本输入
?你可以说得更清楚一点!您应该提到,
\s
需要GNU sed,而
-i
-E
@EdMorton的GNU或OSX/BSD sed语法如何将一个或多个实例与POSIX sed匹配?使用RE interval
\{1,\}
而不是
\+/code>(类似地,
\{0,1\}
而不是
)。
$: sed -E 's/,\s+/,/' file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643
$: sed -Ei 's/,\s+/,/' file.csv
$: cat file.csv
[2,4,5,6,2,34,61,32,34,54,34,22]     0.144354
[3,4,6,4,5,6,7,1,2,3,4,53,23,34]     0.332453
[2,43,6,2,1,2,5,8,9,0,8,6,34,21]     0.347643