【发布时间】:2014-11-14 10:08:06
【问题描述】:
我被困住了。假设我有 4 列的制表符分隔文件。
A326931873 2014-10-26 09:55:28.000 N06 D00030131051410
A326931902 2014-10-26 09:56:10.000 N06
并且想用 \N 替换行尾的空字段。结果应该是
A326931873 2014-10-26 09:55:28.000 N06 D00030131051410
A326931902 2014-10-26 09:56:10.000 N06 \N
我尝试过awk -F'\t' 'BEGIN {sub("", "\N", $4); print}' file、awk -F'\t' 'BEGIN {sub(/^&/, "\N", $4); print}' file 等,但都没有成功。
Update1:按照建议,我也尝试过使用字段数,但awk -F"\t" 'NF<4 {print}' file 没有返回任何结果,即所有行都有四个字段。
Update2:cat -vET file 显示
A326931873^I2014-10-26 09:55:28.000^IN06^ID00030131051410^M$
A326931902^I2014-10-26 09:56:10.000^IN06^I^M$
Update3:去掉回车后cat -vET file显示
A326931873^I2014-10-26 09:55:28.000^IN06^ID00030131051410$
A326931902^I2014-10-26 09:56:10.000^IN06^I$
并且任何建议的解决方案都不起作用。
【问题讨论】:
-
你有一个 DOS 文件。要使用它,您可以尝试使用
dos2unix。还要检查这个答案:Any command we can use to convert windows file to unix or mac file?. -
这不是解决方案中的问题,而是您的输入中的问题。用之前的链接清理它,也许还有stackoverflow.com/a/20601044/1983854
标签: bash awk gsub string-substitution