【发布时间】:2017-10-27 14:10:57
【问题描述】:
我正在使用以下命令将制表符分隔的空字段替换为零。
awk 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = 0 }; 1'
如果我有以下非制表符分隔的输入并且有多个空字段,我该怎么做?
输入
name A1348138 A1086070 A1080879 A1070208 A821846 A1068905 A1101931
g1 5 8 1 2 1 3 1
g2 1 3 2 1 1 2
想要的输出
name A1348138 A1086070 A1080879 A1070208 A821846 A1068905 A1101931
g1 5 8 1 2 1 3 1
g2 1 3 2 1 1 2 0
【问题讨论】:
-
你想要的输出是什么?
-
所以列是固定宽度,而不是制表符分隔?
-
一个可能有用的事情是修复您的输入示例并将解决方案发布为答案。
-
我会花精力唠叨数据生产者给我一个制表符分隔的数据版本 ;-) 或者如果缺少的字段总是在记录的末尾,那么你可以这样做 @ 987654324@(实际上,您还需要在其中添加
...!=8) {for (i=NF;i<=12;i++) {printf " 0" ; } printf "\n"} ...)。祝你好运!! -
具有交替左/右对齐的数据格式,或者任何导致事物以不同方式对齐的数据格式,都会让生活变得地狱。让生产者产生一种可用的格式——向他们低语 XML、JSON 或 CSV;任何一致且正式划界的东西都会比显示的混乱更容易。我有一个为另一个系统(很久以前)编写的程序,它将固定列范围转换为定界格式——我必须将未定界的固定列数据从不可移动的源导入到预期(可变长度)定界格式的数据库中。如果有兴趣,请联系我。
标签: awk