首页 > 解决方案 > 如何在 awk 中正确地进行字符串连接

问题描述

我正在尝试连接.csv文件中的字符串。一个简单的示例数据文件是:

$ cat a
100, 200, 300
400, 500, 600

第一种方法没有任何结果。

$ awk 'BEGIN{FS=",";OFS="-"}{gsub(/ /, "");a=$1$2$3; print $a}' a

在第二种方法中,我也没有得到预期的结果。

$ awk 'BEGIN{FS=",";OFS="-"}{gsub(/ /, "");a="$1$2$3"; print $a}' a
100,200,300
400,500,600

预期的结果是

100200300
400500600

如果“.csv”文件有字符串而不是数字,我仍然没有得到预期的结果。中间插入了一些逗号 (,),即使我已将输出字段分隔符设置为破折号 (-)。

$ cat b
AAA, BBB, CCC
DDD, EEE, FFF

$ awk 'BEGIN{FS=",";OFS="-"}{gsub(/ /, "");a=$1$2$3; print $a}' b
AAA,BBB,CCC
DDD,EEE,FFF

在这种情况下,预期的结果是

AAABBBCCC
DDDEEEFFF

标签: stringawkconcatenation

解决方案


尝试这个:

awk -F', *' -v OFS= '{$1=$1}1' a
100200300
400500600

awk -F', *' -v OFS= '{$1=$1}1' b
AAABBBCCC
DDDEEEFFF

将字段分隔符设置为逗号和零个或多个空格,并将输出字段分隔符设置为空,然后重新创建字段并打印它们。

或者只是删除逗号空间

awk '{gsub(/, */,"")}1' a
sed 's/, *//g' a

推荐阅读