Ath*_*ain 6 command-line text-processing
输入:文件包含数据:
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
Run Code Online (Sandbox Code Playgroud)
我必须根据 ID 和位置来安排这些数据。平均首先按位置升序排列 ID=1,然后从左到右打印域与位置相同的顺序。
输出如:
1 Y-X-Z
2 L-M-N
3 J
4 I-K
Run Code Online (Sandbox Code Playgroud)
我将使用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))
Run Code Online (Sandbox Code Playgroud)
column -t infile读取文件并在此处仅打印左对齐的列。sort -V按版本排序对文件进行排序V。awk将字段读取到数组中,并使用arr键作为column#1和值作为column#3调用,然后在最后打印元素。<(sort -V <(column -t infile)),而如果您的 shell 不支持它,我们可以使用管道来代替,因为muru指出/bin/dash不支持它。输出是:
ID Domaind
1 Y-X-Z
2 L-M-N
3 J
4 I-k
Run Code Online (Sandbox Code Playgroud)
或者您可以按如下方式使用,而不是将整个文件保存到数组中。
ID Domaind
1 Y-X-Z
2 L-M-N
3 J
4 I-k
Run Code Online (Sandbox Code Playgroud)