使用AWK查找csv列中的间隙

时间:2016-10-13 15:14:58

标签: bash awk

我尝试使用AWK查找列中连续数字列表中的间隙。我发现this question与我的要求相同,但无法使其发挥作用。 我的输入是在csv中,看起来类似于以下内容。

aaa,bbb,ccc,ddd,eee,fff,ggg
0,22,33,44,55,66,77
1,88,99,11,12,13,14
2,154,165,-22,-31,-40,-49
3,220,231,-55,-74,-93,-112
6,418,429,-154,-203,-252,-301
7,484,495,-187,-246,-305,-364
8,550,561,-220,-289,-358,-427

我试过了

awk 'NR>1 && $1!=p+1{print p+1"-"$1-1}{p=$1}' file

即使存在范围也会保持打印。 我怀疑这可能是因为我从0开始我的值而不是1,做了一些解决方法,仍然无法让它工作。

我希望在存在间隙时打印警告,例如在这种情况下 "缺少4-5"

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

你需要稍微扭转来处理标题和初始值(这里是0,在引用的脚本中没有正确处理)

$ awk 'NR==1{p=$1-1; next} $1!=p+1{print p+1"-"$1-1} {p=$1}' file

5-19

答案 1 :(得分:0)

您可以使用此awk命令在csv文件的第一列中输出缺少数字的输出:

awk -F, '{while (NR>2 && $1 > p+1) print ++p; p=$1} 1' file.csv

aaa,bbb,ccc,ddd,eee,fff,ggg
0,22,33,44,55,66,77
1,88,99,11,12,13,14
2,154,165,-22,-31,-40,-49
3,220,231,-55,-74,-93,-112
4
5
6,418,429,-154,-203,-252,-301
7,484,495,-187,-246,-305,-364
8,550,561,-220,-289,-358,-427