连接具有不同字段数量的行中的字段

连接具有不同字段数量的行中的字段

给定这样的输入:

x y a b c t
p q w w t
a b c d
p q r

我想连接从字段 3 到最后一个字段的字段,但不包括最后一个字段。如果字段 3 是最后一个字段,我想插入一个占位符。因此,考虑到上面的输入,这是首选输出:

x y a_b_c t
p q w_w t
a b c d
p q _ r

最终结果是所有行都有四个字段。这在 awk 或 cut 或 sed 等中可能吗?

答案1

awk '{
  s = m = ""
  for (i = 3; i < NF; i++) {m = m s $i; s = "_"}
  if (m == "") m = "_"
  print $1, $2, m, $NF}'

答案2

有趣的替代 sed 版本:

sed -r 's/  */_/g; s/_/ /; s/_/ /  # convert all to _, unconvert 1st 2
        ts;:s; s/(.*)_/\1 / ;t     # if a trailing third exists unconvert it
        s/ / _ /2                  # else add one
'

相关内容