任何人都可以向我解释这个小脚本。
echo -e "\"aa;bb\";cc ;\"dd ;ee\";
ff" | awk -v RS=\" -v ORS=\" 'NR%2==0{gsub(";",",")}
{print}'
在此脚本字段中以(;
)分隔,但如果任何字段中有一个或多个(;)
,则此字段被""
包围。它是CSV-file
因此,有必要替换此(;)
中的所有fields
以进行进一步解析。
答案 0 :(得分:2)
echo打印两行:
"aa;bb";cc ;"dd ;ee";
ff
并且awk使用每个双引号拆分记录,而在偶数中用逗号替换所有分号(gsub
)。
因此,第一个记录将是第一次双引号之前的内容,它是一个空白记录,但重要的部分是条件NR%2==0
。 NR
是一个因此条件将为false,gsub()
将不会被执行,它将以ORS
打印,因此输出将是双引号。
对于第二个记录内容将为aa;bb
,NR%2==0
将为true并将替换分号。
对于第三个记录内容将为;cc ;
,NR%2==0
将为false并将打印。
依此类推,直到文件结束。