根据两列重新排列文件内容
输入:文件包含数据:
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))