我怎样才能让 awk 忽略数据中的换行符?

How can I get awk to ignore newlines in data?

我经常需要处理杂乱的文本数据,我需要将这些数据分成多个字段。

我有使用退格键(十进制 008)作为字段分隔符和删除(十进制 127)作为记录分隔符的良好经验,因为它们从未出现在键入的文件中。

我可以获得一个程序来按我想要的方式拆分所有内容,但我也想使用 awk。它接受 RS=<delete> 但它也会打破我不想要的换行记录。

显然,我可以用某种顺序替换换行符并将其翻转回来,但是有没有更巧妙的方法来做到这一点?

如果您根据需要设置 RS 和 FS,我认为这会像您期望的那样工作。

鉴于:

$ echo -n $'a\bb\bc7c\bd' | od -c
0000000    a  \b   b  \b   c 177   c  \b   d                            
0000011

您可以这样使用gawk

$ echo -n $'a\bb\bc7c\bd' | awk -v FS=$'\b' -v RS=$'7' '{ print NR, NF, , , }'
1 3 a b c
2 2 c d 

显然 \b 会导致 [=14=] 的打印无法正确显示,但记录数、字段数和各个字段都符合预期。

注意 $'[string or character]' 的 Bashism 设置测试字符串以创建单个字符 RSFS awk 变量。