是否可以告诉awk忽略字段中的换行符? 我有一个在字段中间有换行符的文件。为了使它更复杂,可以用或不用引号括起字段。
id;code;description
1;a;"blablala"
2;b;"blablabla"
3;c;"a very long description with
line breaks
4;d;"blablabla"
我已经尝试过,但失败了:
awk -F";|[\".*\";]" '{print NF, " ", $1,$2,$3,$4}' awk-test.txt
5 1 a blablala
5 2 b blablabla
4 3 c a very long description with
1 line breaks
5 4 d blablabla
答案 0 :(得分:-1)
您可以使用以下内容:
BEGIN { FS = "[;\"]+" }
NR>1 && NF>1 { for(i=1; i<=cols; ++i) printf "%s%s" a[i], (i<cols?OFS:ORS) }
NF>1 { cols = split($0, a); next }
{ a[cols] = a[cols] $0 }
END { for(i=1; i<=cols; ++i) printf "%s%s" a[i], (i<cols?OFS:ORS) }
一般的想法是将连续的行添加到数组a
的最后一个元素中。当新记录开始时,将打印上一个数组。 END
块打印最后一行的内容。
$ awk -f line.awk file
id code description
1 a blablala
2 b blablabla
3 c a very long description with line breaks
4 d blablabla