linux - 如何在不修改其他列且不创建临时文件的情况下对 bash (linux) 中的特定列进行排序?

标签 linux bash

输入文件

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/

相关文章:

bash - 无法在变量中修剪\r

linux - GNU Bash 3.2.25(1) 多个转义字符显示目录列表

regex - 使用 grep 或其他方式匹配数字 1 而不是 10 或 11

python - 在 bash 脚本中执行 python

linux - 如何在 Linux 中查看日志文件并在查看时应用自定义过滤器?

linux - 什么是接口(interface)标识符

linux - 我如何在 Linux 中更新 npm?

linux bash 剪切以某个字符串开头的一行

linux - 如何输出进程正在调用哪些文件?

bash:在继续之前等待特定的命令输出