我有以下格式的文件
a 2 10 a,c
b 5 8 c
b 7 2 a
c 9 0 c,d,a
现在对于那些在最后一列中有多个条目的人,我希望以下格式为最后一列中的每个条目添加一个新行(1-3列保持不变)
a 2 10 a
a 2 10 c
b 5 8 c
b 7 2 a
c 9 0 d
c 9 0 c
c 9 0 a
请一些建议。
答案 0 :(得分:4)
使用空格和逗号作为字段分隔符,然后从第4个字段开始打印第1,第2,第3和i
字段:
awk -F'[[:space:],]+' '{for(i=4;i<=NF;++i)print $1,$2,$3,$i}' file
输出:
a 2 10 a
a 2 10 c
b 5 8 c
b 7 2 a
c 9 0 c
c 9 0 d
c 9 0 a
如果你不喜欢Perl:
perl -F'[,\s]+' -lane 'print "@F[0..2,$_]" for 3..$#F' file
再次,将逗号和空格分开。或多或少与awk相同的逻辑但短几个字符:)
答案 1 :(得分:3)
这是一种方式:
$ awk '{n=split($NF,ary,/,/); NF--; for(i=1;i<=n;i++) print $0, ary[i]}' file
a 2 10 a
a 2 10 c
b 5 8 c
b 7 2 a
c 9 0 c
c 9 0 d
c 9 0 a
我们将,
上的最后一个字段拆分,并将字段存储在名为ary
的数组中。 split
返回我们存储在变量n
中的分割字段数。我们使用NF--
从行中删除最后一个字段,并遍历元素数量(来自最后一个字段)并打印该行以及ary
中的元素。