AWK - 使用substr整数作为if条件的一部分

时间:2015-02-20 23:31:08

标签: bash if-statement awk integer substr

我正在尝试使用awk one liner来打印子字符串小于已定义变量的文件行。该行必须以字母E开头.E条件正在起作用,但如果'不是'我正在寻找,那么这个结果不是简单的结果。我在这做错了什么?它被合并到一个更大的bash脚本中。提前致谢。

#!/bin/bash
minimum_dpt=50

awk -v depth="$minimum_dpt" '{if (/^E/ && int(substr($0,65,6)<depth)) print "Shot: ",substr($0,21,5)," has depth below minimum. Value: ",substr($0,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

2 个答案:

答案 0 :(得分:2)

您可能打算:

int(substr($0,65,6))<depth

甚至只是:

(substr($0,65,6)+0)<depth

而不是你拥有的:

int(substr($0,65,6)<depth)

可能有更好的方法来做到这一点,但没有看到你的输入和输出idk ......

答案 1 :(得分:1)

这样的任务的可能解决方案:

$ cat input 
102030405060
102030405060
203050601070
904050308090
104030607040
406080903040
$ awk -v dpt=50 '/^1/ && (int(substr($0, 9, 2)) > int(dpt))' <input
104030607040

(根据Ed的评论编辑,谢谢;)