【发布时间】:2020-01-13 17:40:41
【问题描述】:
我正在尝试连接 .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
【问题讨论】:
-
你认为
print $a会做什么? -
对。里面应该没有
$。 -
awk -F, '{print $1""$2""$3}' file -
@DavidC.Rankin 如果没有空间,这可以工作,所以
awk -F', *' '{print $1$2$3}'应该这样做。 -
啊,是的。谢谢你。为未知数量的字段添加相同的多字段分隔符
awk -F', *' '{for(i=1;i<=NF;i++)printf "%s",$i; print""}' file应该也可以。
标签: string awk concatenation