Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用awk或类似的方法,通过特定列中值的差异逐行解析_Linux_Unix_Awk_Grep - Fatal编程技术网

Linux 使用awk或类似的方法,通过特定列中值的差异逐行解析

Linux 使用awk或类似的方法,通过特定列中值的差异逐行解析,linux,unix,awk,grep,Linux,Unix,Awk,Grep,我有一个5列的制表符分隔符文件(file1)。如果第2列中的值差大于1但小于11,我不想打印行 以下是文件1: 11 130068214 G A Test1 11 133790738 A C Test2 11 133790739 A C Test2 12 25398281 C T Test3 12 25398284 C T Test3 12 49418613 C T Test4 12 49424177

我有一个5列的制表符分隔符文件(file1)。如果第2列中的值差大于1但小于11,我不想打印行

以下是文件1:

11 130068214    G   A   Test1
11  133790738   A   C   Test2
11  133790739   A   C   Test2
12  25398281    C   T   Test3
12  25398284    C   T   Test3
12  49418613    C   T   Test4
12  49424177    T   G   Test4
12  49424185    A   C   Test4
12  49434970    T   G   Test4
12  49435227    T   G   Test4
16  2817333 G   T   Test5
16  3781407 T   G   Test6
16  3781413 T   G   Test6
16  3781416 A   C   Test6
16  3781419 A   C   Test6
4   141622708   C   T   Test7
X   107374574   G   A  Test28
这是我想要的输出(文件2):

我尝试了以下代码,但没有得到所需的输出:

more file1 | awk '{if ($2!<prev) print $0; prev=$2}' > file2

more file1 | awk'{if($2!您显示的输出不符合您的要求。考虑到您需要前第二列与当前第二列的差异,其差异范围应在1到12之间,如果是这种情况,则以下内容可能会帮助您:

awk '((($2-prev)>1) && (($2-prev)<=11)) || FNR==1{print} {prev=$2}'  Input_file

awk'(($2-prev)>1)和($2-prev)将以下代码保存在文件中,比如在
filter.awk
中,并像
awk-f filter.awk data.tsv
一样运行

FNR==1 { prev = $0; prev_num =$2; prev_ok=1 }
FNR>1 {
  d = ($2-prev_num)**2; ok = !(d<121 && d>1);
  #workaround for ignoring sign

  if (prev_ok && ok) print(prev);

  prev_num=$2; prev =$0; prev_ok = ok;
}
END { if (prev_ok)  print (prev); }
FNR==1{prev=$0;prev_num=$2;prev_ok=1}
FNR>1{
d=(上一个数字为$2)**2;ok=!(d1);
#忽略符号的解决方法
如果(prev_ok&&ok)打印(prev);
prev_num=$2;prev=$0;prev_ok=ok;
}
结束{if(prev_ok)print(prev);}

欢迎使用Stack Overflow,请在帖子中为您显示的示例输入文件和预期输出使用代码标记。
FNR==1 { prev = $0; prev_num =$2; prev_ok=1 }
FNR>1 {
  d = ($2-prev_num)**2; ok = !(d<121 && d>1);
  #workaround for ignoring sign

  if (prev_ok && ok) print(prev);

  prev_num=$2; prev =$0; prev_ok = ok;
}
END { if (prev_ok)  print (prev); }