如何使用Linux命令进行反向排序



我有一个像这样的file.txt


有必要使用脚本或命令使其看起来像这样:


我尝试sort -k2,2nr file.txt它的工作,但我也改变列在中间)也许你可以帮我做点什么,我也知道AWK可以使用$中指定的列,但我不明白如何正确地完成

建议简化awk脚本:

script.awk

{ # read each line from input file, NR is internal variable `Number of Row`
arr1[NR] = $1; # read column #1 into arr1
arr2[NR] = $2; # read column #2 into arr2
arr3[NR] = $3; # read column #3 into arr3
}
END { # post processing after reading input file.
for (i = NR; i > 0; i--){ # reverse read the arrays from top to bottom
print arr1[i], arr2[NR + 1 - i], arr3[i]; # orderly output arr1, arr3, but reverse order arr2
}
}

running:

awk -f script.awk input.txt

这可能适合您(GNU sort, sed和cat):

sort -k2,2n file |
sed -E 's/^S+ (S+).*/s#\S+#1#2/' |
cat -n |
sed -Ef - <(sort -k2,2nr file)

按升序排序文件的第2列。

提取第2列并将这些值转换为sed替换脚本。

对上述脚本应用行号。

将脚本应用到按列2降序排序的同一文件


粘贴效果相同:

paste <(sort -k2,2nr file) <(sort -k2,2n file) | 
sed -E 's/^(S+) S+ (S+)tS+ (S+) .*/1 3 2/'

最新更新