在awk

时间:2016-05-23 07:19:13

标签: linux bash awk

我想在awk命令中拆分和比较。

输入文件(制表符分隔)

1 aaa 1|3
2 bbb 3|3
3 ccc 0|2

过滤

  1. 第一列值> 1
  2. 由" |"分割的第三列值的第一个值> 2
  3. 流程

    1. 比较第一列值(如果大于1
    2. 将第三列值拆分为" |"
    3. 如果大于2
    4. ,则比较第三列的第一个值
    5. 如果第一个值大于2,则打印
    6. 命令行(示例)

      awk -F "\t" '{if($1>1 && ....?) print}' file
      

      输出

      2 bbb 3|3
      

      请告知我上述处理的命令行。

1 个答案:

答案 0 :(得分:5)

您可以将字段分隔符设置为制表符或管道,并检查第1和第3个值:

awk -F'\t|\\|' '$1>1 && $3>2' file

awk -F"\t|\\\\|" '$1>1 && $3>2' file

你可以在awk: fatal: Invalid regular expression when setting multiple field separators的Ed Morton的综合答案中读到所有这些逃避的角色。

否则,您可以拆分第3个字段并检查第一个切片的值:

awk -F"\t" '{split($3,a,"|")} $1>1 && a[1]>=2' file