根据其他列的信息创建新列

时间:2014-06-18 12:26:01

标签: bash shell

我有4个不同位置的列,如下所示:

Ica Ica Ica Ica 
Lima Ayacucho Ayacucho Ayacucho 
Lima Lima Ayacucho Ayacucho 
Lima Ayacucho Puno Ica 
Lima Lima Ayacucho
Lima Ica Ayacucho Lima

有时缺少某些位置,例如在第5行中没有最后一列的位置。

我想要做的是创建一个新列,告诉每行有多少个不同的位置。例如,第一行对于所有列具有相同的位置。所以我想要一个新的列,其中包含数字1。

看起来应该是这样的:

Ica Ica Ica Ica 1
Lima Ayacucho Ayacucho Ayacucho 2
Lima Lima Ayacucho Ayacucho 2
Lima Ayacucho Puno Ica 4
Lima Lima Ayacucho
Lima Ica Ayacucho Lima 3

请注意,因为第5行有一个缺失值,即最后一列,我不想要任何数字。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

不是最优雅,但它确实起作用:

awk '{
  delete cols
  for (i = 1; i <= NF; i++)
    cols[$i]
  printf "%s%s\n", $0, NF == 4 ? " " length(cols) : ""
}' input-file.txt
相关问题