我怎么能做反向排序使用linux命令

xfb7svmp  于 2022-11-22  发布在  Linux
关注(0)|答案(2)|浏览(112)

我有file.txt像这样
需要使用脚本或命令使其看起来像这样:
我尝试了sort -k2,2nr file.txt,它工作正常,但我还更改了中间的列)也许您可以帮助我,我还知道AWK可以处理$中指定的列,但我不知道如何正确地执行此操作

mdfafbf1

mdfafbf11#

建议使用此简化的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
axzmvihb

axzmvihb2#

这可能对你有用(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+)\t\S+ (\S+) .*/\1 \3 \2/'

相关问题