这是我的工作文件。(列号和行号未知)
key_ID col_1 col_2 col_3
AA 1 1 1
BB 56 2 7
CC 89 5 2
DD 7 77 7
我想对每列的底部 2 个值进行排序,以便key_ID
从第一列中找到它们对应的值。
期望的输出就像
col_1 col_2 col_3
AA AA AA
DD BB CC
这是我的工作文件。(列号和行号未知)
key_ID col_1 col_2 col_3
AA 1 1 1
BB 56 2 7
CC 89 5 2
DD 7 77 7
我想对每列的底部 2 个值进行排序,以便key_ID
从第一列中找到它们对应的值。
期望的输出就像
col_1 col_2 col_3
AA AA AA
DD BB CC
使用
csvsql
来自csvkit
:输出:
您应该可以
csvkit
通过以下方式安装pip
:使用纯
bash
:输出:
它所做的是逐个查看您的列及其标签,例如
labels,col1
,然后labels,col2
等等。然后它排序并找到每个组中具有两个最低值的标签,并将它们放入临时文件中。
在执行此操作时,我们会创建所有这些文件的列表。
所以现在我们有一堆包含所需列表的临时文件,我们应该使用
paste
命令将它们放在一起并删除这些临时文件:与我的答案类似的想法使用
csvsql
, 但使用paste
,sort
和awk
:输出:
不是
bash
解决方案,但在 SQL 中,这可以很容易地完成:首先,创建表:
现在使用第一个和第二个值创建三个派生表,为每个表添加一个行号,并将它们连接到行号:
给
tail -n +2 给你除了标题行之外的所有内容
sort -k2 -n 对第二列进行排序 - 对其他列使用 -k3 和 -k4 重复此操作
head -n 2 为您提供前 2 行
然后根据需要存储输出。