输入文件
0 1.0069770730517629 A 1 1.0068122761874614 A 2 1.0004297763706849 B 3 1.0069220626905635 C 4 1.0079998216945956 C 5 1.0006092898635817 D 6 1.0071274842017928 A 7 1.0083750686808803 A 8 1.0006868227863552 B 9 1.0073693844413083 C 10 1.0086546525825624 C 11 1.0007234442925264 D
Expected output:
0 1.0086546525825624 A 1 1.0083750686808803 A 2 1.0079998216945956 B 3 1.0073693844413083 C 4 1.0071274842017928 C 5 1.0069770730517629 D 6 1.0069220626905635 A 7 1.0068122761874614 A 8 1.0007234442925264 B 9 1.0006868227863552 C 10 1.0006092898635817 C 11 1.0004297763706849 D
My solution using a temporal file
awk '{print $2}' input.txt | sort -gr > temp.txt
paste input.txt temp.txt | awk '{print $1,$4,$3}'
rm temp.txt
问题
是否可以在不修改其他列且不创建临时文件的情况下对 bash (linux) 中的特定列进行排序?
最佳答案
您可以使用 -
作为 paste
的文件名参数来告诉它使用标准输入。
cut -d' ' -f2 input.txt | sort -gr | paste input.txt - | cut -d' ' -f1,4,3
如果它不支持这个,你可以使用进程替换。
paste input.txt <(cut -d' ' -f2 input.txt | sort -gr) | cut -d' ' -f1,4,3
关于linux - 如何在不修改其他列且不创建临时文件的情况下对 bash (linux) 中的特定列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104899/