我有一个包含以下行的文件:
1 24 4
1 2 3
1 5 9
2 1 8
2 3 4
我想使用 shell 脚本按每行中的第一个元素对这些行进行分组。比如我们有3行,第一个元素是'1',那么我想把第二个元素,即"24, 2 5"和第一个元素放在同一行,分组结果是:
1 24 2 5
2 1 3
我如何使用 shell 脚本执行此操作?谢谢!
最佳答案
如果您的输入是根据第一列排序的,那么您可以打印第 1 列并在第 2 列发生变化时填充它们。像这样的东西:
awk '
$1!=fld1 && NR>1{
print fld1, fld2
fld1 = $1; fld2 = $2
next
}
{
fld1 = $1;
fld2 = ((fld2) ? fld2 FS $2 : $2)
}
END{print fld1, fld2}' file
1 24 2 5
2 1 3
如果您的输入是随机的,那么您最好将值存储在数组中。
awk '{a[$1] = ((a[$1]) ? a[$1] FS $2 : $2)}
END{for(x in a) print x,a[x]}' file
1 24 2 5
2 1 3
关于linux - shell 脚本 : how to group rows according to the first field/element in each row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22943445/