【发布时间】:2017-05-03 16:58:49
【问题描述】:
我经常需要处理需要拆分成字段的杂乱文本数据。
我在使用退格(十进制 008)作为字段分隔符和删除(十进制 127)作为记录分隔符方面有很好的经验,因为它们从未出现在键入的文件中。
我可以得到一个程序来按我想要的方式拆分所有内容,但我也想使用 awk。它接受RS=<delete>,但它也打破了我不想要的换行记录。
显然,我可以用某种序列替换换行符并将其翻转回来,但是有没有更巧妙的方法来做到这一点?
【问题讨论】:
-
请添加示例输入和所需结果。太多工作无法猜测。
-
不要回答不懂的问题。我使用退格和删除字符作为分隔符,因为它们不会出现在手动输入的数据文件中。对于简单的测试,请尝试以下操作: cat > test a
b c d e f g h i 这将创建三个记录,每个记录有 3 个字段——最后一个字段应该包含一个换行符。但是,如果您尝试 awk '{FS="\010"}{RS="\177"}{OFS=" "}{ORS="\n"}{print NR"--"NF"--"$0} ' 测试我保证这不是你会看到的。 -
@jas,如果设置为大多数普通字符,awk 不会换行。但这不正常。我建议在告诉人们他们所观察到的事情没有发生之前测试行为或进行研究。
-
我很抱歉 --- 评论已删除。我应该要求更多澄清;我现在看到我没有完全理解这个问题。让我们看看其他人能想出什么。
-
awk的哪个版本?如果gawk您可以将FS和RS设置为正则表达式。您设置了一个不会发生的正则表达式,例如RS=FS="X^",整个文件被读取,$1是整个文件。你是这个意思吗?如果没有示例输入和输出,您的问题就不清楚。