Awk命令中的if语句

时间:2018-08-16 14:54:53

标签: awk

我有类似的数据:

13979  1
13980  2
13986  3
14023  4
15671  5

我想首先计算第一列的两个相邻值之间的差(13980-13979; 13986-13980; 14023-13986;等等)。然后,如果当前差异大于20,我想打印出字符串。在我的示例中:

14023  4
15671  5

我的代码:

cat file.txt | awk -F "\t" 'BEGIN {x=13979}; {print $1-x} ; {x=$1}'

但是如何在我的代码示例中添加if语句?

2 个答案:

答案 0 :(得分:3)

请您尝试以下。

awk '($1-prev)>20 && prev;{prev=$1}'  Input_file

OR

awk '($1-prev)>20 && FNR>1;{prev=$1}'  Input_file

输出如下。

14023  4
15671  5

说明: 也在此处添加了说明(以下内容仅出于说明目的,不用于运行)。

awk '           ##Starting awk script from here.
($1-prev)>20    ##Checking condition here if subtraction of $1(first field) and variable prev is greater than 20(1st condition)
&&              ##Putting AND condition to check multiple conditions here.
prev;           ##Checking if variable prev is NOT NULL, if both conditions are TRUE then do following.
{
prev=$1         ##Setting variable prev value as $1(first field of current line).
}'  Input_file  ##Mentioning Input_file name here.

答案 1 :(得分:1)

这是一个接近您所拥有的代码,但确实有效的awk:

awk -F"\t" -v dif=20 'FNR==1{x=$1; next}  # first record, set x
                      ($1-x)>dif  # if this is true -- print
                      {x=$1}' file.txt