1

谁能解释我这个小脚本。

echo -e "\"aa;bb\";cc ;\"dd ;ee\"; 
ff" | awk -v RS=\" -v ORS=\" 'NR%2==0{gsub(";",",")}
{print}'

在此脚本中,字段由 ( ;) 分隔,但如果(;)任何字段中有一个或多个,则该字段由"".It's包围CSV-file

因此有必要将(;)这里全部替换fields为进一步解析。

4

1 回答 1

2

echo 打印两行:

"aa;bb";cc ;"dd ;ee"; 
ff

用每个双引号分割记录,在偶数中用逗号 ( ) 替换所有分号gsub

因此,第一个记录将是第一个双引号之前的内容,它是一个空白记录,但重要的部分是条件NR%2==0NR是一个,所以条件为假,gsub()不会被执行,它会被打印出来,ORS所以输出将是一个双引号。

对于第二条记录,内容将为aa;bb,NR%2==0为 true 并将替换分号。

对于第三条记录的内容将为;cc ;,NR%2==0将是 false 并且将被打印。

依此类推,直到文件结束。

于 2013-07-11T20:24:16.183 回答