Linux 如何将列输出合并到上一列的行末尾?
我有一个包含三列的.csv文件,需要将第2列的值与第1列行的末尾合并 .csv文件包含数千行,需要为每行执行此操作 我尝试过使用awk,但我发现很难获得正确的代码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,
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