【问题标题】:Linux awk sort descending order not workingLinux awk降序排序不起作用
【发布时间】:2014-01-03 11:32:59
【问题描述】:

我有两个需要排序的文件。

我使用的命令是:

cat first-in.txt | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1 | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq > first-out.txt


cat second-in.txt | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1 | sort -b -t . -k 1,1nr -k 2,2nr -k 3,3r -k 4,4r -k 5,5r | uniq > second-out.txt

问题是: 我需要按降序正确排序,因为现在只有文件 2 排序正确,但文件 1 排序不正确。

我想知道我犯的错误

文件

All files are here including output are here

提前致谢。

【问题讨论】:

  • 列出第一个和第二个文件,以及你喜欢的输出方式。这个cat first-in.txt | awk '{print $2}' | cut -d '/' -f 3 | cut -d '^' -f 1 可以改为awk '{split($2,a,"/");split(a[3],b,"^");print b[1]}' first-in.txt | sort...
  • @Jotne First file , Second file 和 out 必须像 Output

标签: linux sorting awk


【解决方案1】:

我猜你的意思是这是错误的:

4.2.4
4.2.3
4.2.20
4.2.2

您希望4.2.20 高于所有这些,对吗?

您可以通过更改 sort-k 参数以将所有字段视为数字来解决此问题:

.... -k 1,1nr -k 2,2nr -k 3,3nr -k 4,4nr -k 5,5nr ....

【讨论】:

    【解决方案2】:

    GNU/Linux 系统上,您可以使用 sort-V 选项:

    sed -r 's|.*/([^/^]*).*$|\1|' infile | sort -Vr
    

    请注意,sed -rsort -V 都不是标准的。

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多