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