AWK - 使用 substr 整数作为 if 条件的一部分
AWK - using substr integer as part of if condition
我正在尝试使用 awk one liner 打印子字符串小于定义变量的文件行。此外,该行必须以字母 E 开头。E 条件有效,但不是我正在寻找的简单 if 'less than' 的结果。我在这里做错了什么?它被合并到一个更大的 bash 脚本中。提前致谢。
#!/bin/bash
minimum_dpt=50
awk -v depth="$minimum_dpt" '{if (/^E/ && int(substr([=10=],65,6)<depth)) print "Shot: ",substr([=10=],21,5)," has depth below minimum. Value: ",substr([=10=],65,6)'}
输入:
E1985020687 1 1 2942984632.99S 88 354.60E 596044.16185585.10000.9 44 826 9
E1985020687 1 1 2943264732.95S 88 359.24E 595917.26185461.80000.5 44 82727
E1985020687 1 1 2944264741.97S 88 450.86E 594520.36185751.92445.3 44 82846
E1985020687 1 1 2945264741.97S 88 450.86E 594520.36185751.90045.3 44 82846
输出:
Shot: 2942 has depth below minimum. Value: 0000.9
Shot: 2943 has depth below minimum. Value: 0000.5
Shot: 2945 has depth below minimum. Value: 0045.3
您可能打算:
int(substr([=10=],65,6))<depth
甚至只是:
(substr([=11=],65,6)+0)<depth
而不是你拥有的:
int(substr([=12=],65,6)<depth)
可能有更好的方法来执行此操作,但看不到您的输入和输出 idk...
这样的任务的可能解决方案:
$ cat input
102030405060
102030405060
203050601070
904050308090
104030607040
406080903040
$ awk -v dpt=50 '/^1/ && (int(substr([=10=], 9, 2)) > int(dpt))' <input
104030607040
(根据 Ed 的评论编辑,谢谢 ;)
我正在尝试使用 awk one liner 打印子字符串小于定义变量的文件行。此外,该行必须以字母 E 开头。E 条件有效,但不是我正在寻找的简单 if 'less than' 的结果。我在这里做错了什么?它被合并到一个更大的 bash 脚本中。提前致谢。
#!/bin/bash
minimum_dpt=50
awk -v depth="$minimum_dpt" '{if (/^E/ && int(substr([=10=],65,6)<depth)) print "Shot: ",substr([=10=],21,5)," has depth below minimum. Value: ",substr([=10=],65,6)'}
输入:
E1985020687 1 1 2942984632.99S 88 354.60E 596044.16185585.10000.9 44 826 9
E1985020687 1 1 2943264732.95S 88 359.24E 595917.26185461.80000.5 44 82727
E1985020687 1 1 2944264741.97S 88 450.86E 594520.36185751.92445.3 44 82846
E1985020687 1 1 2945264741.97S 88 450.86E 594520.36185751.90045.3 44 82846
输出:
Shot: 2942 has depth below minimum. Value: 0000.9
Shot: 2943 has depth below minimum. Value: 0000.5
Shot: 2945 has depth below minimum. Value: 0045.3
您可能打算:
int(substr([=10=],65,6))<depth
甚至只是:
(substr([=11=],65,6)+0)<depth
而不是你拥有的:
int(substr([=12=],65,6)<depth)
可能有更好的方法来执行此操作,但看不到您的输入和输出 idk...
这样的任务的可能解决方案:
$ cat input
102030405060
102030405060
203050601070
904050308090
104030607040
406080903040
$ awk -v dpt=50 '/^1/ && (int(substr([=10=], 9, 2)) > int(dpt))' <input
104030607040
(根据 Ed 的评论编辑,谢谢 ;)