更简单的方法是使用 tr
$ tr '_' ',' < input.csv | tr -d '"'
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
它的工作方式是使用tr
两个参数-要替换的字符集和它们的替换。在这种情况下,我们只有1个字符的集合。我们通过shell运算符重定向input.csv
输入tr
的stdin流<
,并将得到的输出通过管道传递tr -d '"'
到删除双引号。
但是awk
也可以做到。
$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
其工作方式略有不同:awk逐行读取每个文件,每个内联脚本为/Pattern match/{ codeblock}/Another pattern/{code block for this pattern}
。这里我们没有模式,因此这意味着为每行执行代码块。gsub()
函数用于一行中的全局替换,因此我们使用它来将下划线替换为逗号,并将双引号替换为空字符串(有效删除字符)。的1
是代替模式匹配的缺失码块,缺省简单地打印线; 换句话说,代码块可以gsub()
完成工作并1
打印结果。
使用shell重定向(>
)将输出发送到新文件:
awk '{gsub(/_/,",");gsub(/\"/,"")};1' input.csv > output.csv