我经常不得不操纵我需要打破字段的凌乱文本数据。
我有很好的经验使用退格(008十进制)作为字段分隔符并删除(十进制127)作为记录分隔符,因为它们从未出现在类型文件中。
我可以得到一个程序,以我想要的方式分割所有内容,但我也想使用awk。它接受RS=<delete>
但它也打破了我不想要的换行记录。
显然,我可以用某种顺序替换新行并将其翻转,但有没有更明智的方法来做到这一点?
答案 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]'
的基础,设置测试字符串以创建单个字符RS
和FS
awk变量。