linux - 在 awk 中拆分和比较

标签 linux bash awk

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

输入文件(制表符分隔)

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

过滤

  1. 第一列值 > 1
  2. 用“|”分隔的第三列值的第一个值> 2

过程

  1. 比较第一列的值是否大于 1
  2. 用“|”分割第三列值
  3. 比较第三列的第一个值是否大于2
  4. 仅当第一个值大于 2 时打印

命令行(示例)

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

输出

2 bbb 3|3

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

最佳答案

您可以将字段分隔符设置为制表符或竖线并检查第一个和第三个值:

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

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

您可以在埃德·莫顿 (Ed Morton) 在 awk: fatal: Invalid regular expression when setting multiple field separators 中的综合回答中了解所有这些逃逸角色。 .

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

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

关于linux - 在 awk 中拆分和比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37384813/

相关文章:

Linux while 读循环

json - 将变量传递给 aws cli 内联 json

linux - 等待一个进程完成并执行另一个进程

linux - 如何仅从文本文件的第一行和最后一行中提取数据

linux - AWK 输出到数组

linux - 如何在 Linux 中使用 awk/sed 或其他命令删除某些字符串?

linux - 如果 eth0 关闭/启动,如何发送不同的 SNMP 陷阱?

c - 如何修改指令处理器C

linux - 分发静态链接的 ELF 32 位二进制文​​件 - 它会在所有平台上运行吗?

bash -/.bashrc在打开或登录用户时给出错误