如何让awk忽略数据中的换行符?

时间:2017-05-03 16:58:50

标签: awk delimiter delimited-text

我经常不得不操纵我需要打破字段的凌乱文本数据。

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

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

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

1 个答案:

答案 0 :(得分:1)

我认为如果您根据需要设置RS和FS,这可以正常工作。

假设:

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

您可以这样使用gawk

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

显然\b会导致$0的打印无法正确显示,但记录计数,字段数和各个字段都是预期的。

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