如何根据行的特殊部分对文件行进行排序

时间:2016-06-07 16:45:27

标签: regex shell sorting awk

这是我要排序的文件内容(只是一个简化示例):

  1 33      blabla_0_banana
  2 32333   lablab_4_apple
  3 1232312 hahaah_1_banana
  4 3342222 ohohoh_2_apple

我想用两个要求对结果进行排序:

  1. 首先是结束词(例如:banana \ apple)

  2. 其次是两个“_”符号之间的数字:_ [number] _(例如:0 \ 4 \ 1 \ 2)

  3. 这是我想要的结果:

      4 3342222  ohohoh_2_apple
      2 32333    lablab_4_apple
      1 33       blabla_0_banana
      3 1232312  hahaah_1_banana
    

    最后,我想删除第二个数字> 100000的行,这也是我想要的结果:

      2 32333    lablab_4_apple
      1 33       blabla_0_banana
    

    我该怎么做?也许使用命令'sort','awk'或其他。

1 个答案:

答案 0 :(得分:3)

使用sort

sort -t_ -k3 -k2n file

4 3342222 ohohoh_2_apple
2 32333   lablab_4_apple
1 33      blabla_0_banana
3 1232312 hahaah_1_banana

仅保留2nd column < 100000使用awk的行:

awk '$2<100000' file | sort -t_ -k3 -k2n
2 32333   lablab_4_apple
1 33      blabla_0_banana

Working Code Demo