awk和替换分号(;)在指定的领域

时间:2013-07-11 18:59:08

标签: csv awk gsub

任何人都可以向我解释这个小脚本。

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

在此脚本字段中以(;)分隔,但如果任何字段中有一个或多个(;),则此字段被""包围。它是CSV-file

因此,有必要替换此(;)中的所有fields以进行进一步解析。

1 个答案:

答案 0 :(得分:2)

echo打印两行:

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

并且使用每个双引号拆分记录,而在偶数中用逗号替换所有分号(gsub)。

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

对于第二个记录内容将为aa;bbNR%2==0将为true并将替换分号。

对于第三个记录内容将为;cc ;NR%2==0将为false并将打印。

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