gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:48 25 4
gpt4 key购买 nike

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

最佳答案

您可以使用以下内容:

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 block 打印最后一行的内容。

$ 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

关于linux - 告诉 awk 忽略字段中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com