假设我有这个文件由制表符分隔:
This is a cat,dog
I run around the house,garage
我想用逗号替换所有选项卡实例(我可以做那部分),但也用引号将所有带逗号的单词包装在其中。因此生成的文件看起来像:
This,is,a,"cat,dog"
I,run,around,the,"house,garage"
我将如何做到这一点?
答案 0 :(得分:3)
这是一种方法:
awk -v FS='\t' -v OFS=, '{$1=$1; for(i=1; i<=NF; i++) if($i ~ /,/) $i = "\"" $i "\"" } 1'
输出:
This,is,a,"cat,dog"
I,run,around,the,"house,garage"
OFS=,
和$1=$1
使awk用OFS替换FS。1
会调用默认规则{ print $0 }
。steve是对的,在这种情况下,sed更简洁。你可以通过使用正则表达式(借用史蒂夫)并附加OFS和FS的设置(用GNU awk测试)来缩短它:
awk '{ $0 = gensub(/[^\t]*,[^\t]*/, "\"&\"", "g"); $1=$1 } 1' FS='\t' OFS=,
答案 1 :(得分:1)
使用sed和tr,还可以处理单词之间的空格:
sed 's/\([a-zA-Z]*[ ]*,[ ]*[a-zA-Z]*\)/"\1"/' input | tr '\t' ','
答案 2 :(得分:1)
awk
可能不适合这项工作。我认为sed
会是更好的选择。这就是我要做的事情:
sed 's/[^\t]*,[^\t]*/"&"/g;s/\t/,/g' file