我尝试使用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"
非常感谢任何帮助。
答案 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