建议简化
我有一个像这样的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/'