首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用linux命令进行反向排序?

如何使用linux命令进行反向排序?
EN

Stack Overflow用户
提问于 2022-11-14 19:29:51
回答 2查看 46关注 0票数 -2

我有这样的file.txt

代码语言:javascript
复制

有必要使用脚本或命令使其看起来如下:

代码语言:javascript
复制

我试着使用sort -k2,2nr file.txt --它可以工作,但是我也更改了中间的列)也许您可以帮助我做一些事情,我也知道AWK可以使用$中指定的列,但是我不知道如何正确地完成它

EN

回答 2

Stack Overflow用户

发布于 2022-11-14 20:15:20

建议使用这个简化的awk脚本:

script.awk

代码语言:javascript
复制
{ # 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:

代码语言:javascript
复制
awk -f script.awk input.txt
票数 0
EN

Stack Overflow用户

发布于 2022-11-15 00:07:35

这可能适用于您(GNU排序、sed和cat):

代码语言:javascript
复制
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列按降序排序的同一文件。

使用粘贴的相同效果:

代码语言:javascript
复制
paste <(sort -k2,2nr file) <(sort -k2,2n file) | 
sed -E 's/^(\S+) \S+ (\S+)\t\S+ (\S+) .*/\1 \3 \2/'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74436878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档