【发布时间】:2017-01-12 21:38:54
【问题描述】:
我有类似的文件:
AA,A=14,B=356,C=845,D=4516
BB,A=65,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,F=225
我永远不知道行中是否缺少 A、B、C 或 D 值。但我需要像这样转换这个文件:
AA,A=14,B=356,C=845,D=4516,-,-
BB,A=65,-,C=255,D=841,E=5133,F=1428
CC,A=88,B=54,C=549,-,-,F=225
因此,如果缺少任何值,只需打印- 标记。我的计划是具有相同数量的列以便于解析。我更喜欢 awk 解决方案。感谢您的任何建议或帮助。
我的第一次尝试是:
awk '{gsub(/[,]/, "\t")}; BEGIN{ FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i ~ /^ *$/) $i = "-" }; {print $0}'
但后来我注意到,有些值丢失了。
编辑:
从我的标题中我知道有值 A,B,C,D,E,F...
【问题讨论】:
-
到目前为止您尝试过什么?通过将
,定义为分隔符并遍历所有列,可以使用 awk.. -
请参阅已编辑。我的第一次尝试是在 awk 中。
-
感谢您添加您的尝试,您能否说明您希望输出为
tab分隔还是comma分隔? -
在我的第一次尝试中是制表符分隔的,但我真的不介意。我们可以保留逗号。
-
如果两列从未同时出现在同一行,则它们的顺序可以是未定义的(例如
A=1,B=2,D=3和A=4,C=5,D=6)。在这种情况下应该输出什么?