linux - shell 脚本 : how to group rows according to the first field/element in each row

标签 linux bash shell

我有一个包含以下行的文件:

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/

相关文章:

linux - 适用于 Linux 的 Delphi Tokyo : stream file contents to stdout (console output)

git - 在一个命令中检查目录是否为 Git 根目录

bash - 如何获取 CSV 中一列中不同值的总数?

bash - grep命令知道两个字符串是否按特定顺序

linux - grep 并发现在 shell 脚本中不起作用

c++ - 使用 CMake 为 CUDA 构建多配置/多平台

bash - 在不知情的情况下从文件中删除扩展名

arrays - 如何循环查看命令的输出?

string - Shell 脚本三元运算符获取字符串结果

linux - 将安装包添加到 linux 容器 (lxc) 缓存