Bash 基于其他列的信息创建新列
我有4列不同的位置,如下所示:Bash 基于其他列的信息创建新列,bash,shell,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 Ica Ica Ica Ica 1 Lima Ayacucho Ayacucho Ayacucho 2 Lima Lima Ayacucho Ayacucho 2 Lima A
Ica Ica Ica Ica
Lima Ayacucho Ayacucho Ayacucho
Lima Lima Ayacucho Ayacucho
Lima Ayacucho Puno Ica
Lima Lima Ayacucho
Lima Ica Ayacucho Lima
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
它应该是这样的:
Ica Ica Ica Ica
Lima Ayacucho Ayacucho Ayacucho
Lima Lima Ayacucho Ayacucho
Lima Ayacucho Puno Ica
Lima Lima Ayacucho
Lima Ica Ayacucho Lima
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行缺少一个值,即最后一列,所以我不希望有任何数字
谢谢你的帮助。虽然不是最优雅的,但它确实起到了作用:
awk '{
delete cols
for (i = 1; i <= NF; i++)
cols[$i]
printf "%s%s\n", $0, NF == 4 ? " " length(cols) : ""
}' input-file.txt
awk'{
删除列
对于(i=1;我已经给出了答案,只有当我所在的地区不同时才能解决我的问题。如果它们都有相同的名称,我希望在新列中有一个数字“1”,而不是一个“4”。很抱歉,我现在用标记为重复,我发现它不够准确。重新打开。