告诉awk忽略字段中的换行符

时间:2014-08-25 14:52:26

标签: linux awk

是否可以告诉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

1 个答案:

答案 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