在awk

时间:2016-05-27 11:09:10

标签: linux bash shell awk gawk

我有一个大文件,有50​​个列和100K行由|分隔。现在$2(第2列)有多种$1(col 1)值,这意味着col 2将被重复。所以我已经对文件进行了排序。 我现在需要在以下条件的基础上提取/过滤结果文件:

  • 条件1:当$2同时具有$1类型($1的{​​{1}}值大于8000且小于8000)时,请选择完整用于$2的行给定$1
  • 的8000
  • 条件2:如果$2仅有$2,则选择具有最大$1 > 8000值的完整行

例如:源文件

$8

结果文件将包含:

4000|1234||||||23
5000|1234||||||22
9000|1234||||||25
10000|123|||||||22
22000|456|||||||27
15000|456|||||||29

有人可以就此提出建议吗?提前致谢

1 个答案:

答案 0 :(得分:0)

这是答案:我得到了......

 sort -n -t\| -k2 -k1 < sortexp.txt |awk -F\| '$1 < 8000 { a[$2]++ ; print } $1 >= 8000 { if ( !a[$2] && ( !e[$2] || e[$2]<$8 ))  {u[$2]=$0;e[$2]=$8;} ; } END { for ( i in u ) print u[i] ;}'