根据两列重新排列文件内容

输入:文件包含数据:

ID Location Domaind 1 20 X 1 5 y 1 25 Z 2 1 L 2 150 N 2 50 M 3 50 J 4 33 k 4 3 I 

我必须根据ID和位置安排这些数据。 平均首先按位置的升序排列ID = 1,然后从左到右打印域与位置相同的顺序。

输出如:

 1 YXZ 2 LMN 3 J 4 IK 

我会使用awk命令如下。

 awk '{arr[$1]=arr[$1]d[$1]$NF; d[$1]="-"} END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t infile)) 
  • column -t infile读取文件,这里只打印左对齐的列。
  • sort -V将文件排序为V ersion排序。
  • 并且awk只是将字段读入名为arr数组,其中键为#1列,值为关于列#3,然后在末尾打印元素。
  • 在这里我使用了进程替换<(sort -V <(column -t infile))而我们可以使用Pipes而不是你的shell不支持它,因为muru指向/bin/dash没有。

输出是:

 ID Domaind 1 YXZ 2 LMN 3 J 4 Ik 

或者你可以使用如下,而不是将整个文件保存到数组中。

 awk 'p!=$1 &&p{print l}{l=($1!=p)?$1FS$3:l"-"$3;p=$1}' <(sort -V <(column -t in))