我有一条线:
string 2 2 3 3 1 4
其中第2列,第4列和第6列表示ID(假设每个ID号是唯一的),第3列,第5列和第7列表示与相应ID相关联的一些数据 .
如何重新排列该行,以便按ID排序?
string 1 4 2 2 3 3
注意:与示例不同,一行可以包含任意数量的ID .
使用shell脚本,我在想类似的东西
while read n
do
echo $(echo $n | sork -k (... stuck here) )
done < infile
4 回答
作为bash脚本,可以通过以下方式完成:
Code:
File infile:
Output:
Update:
从grail's version中删除排序,以删除(慢得多)外部排序:
另一种bash替代方案,它不依赖于有多少id:
如果您想要读取文件,可以在批次周围放置一个循环
我将为您的长选项列表添加一个gawk解决方案 .
这是一个独立的脚本:
这可以通过将元组复制到数组中,对数组进行排序,然后在打印数组元素的for循环中重新组装已排序的元组来实现 .
请注意,由于使用了
asort()
,它只是gawk(不是传统的awk) .你可以使用python . 此函数将列拆分为
list
,然后可以对其进行排序 . 然后使用itertools.chain
重新组合键值对 .Code:
Test Code:
Results: