繁体   English   中英

BASH列表搜索Awk

[英]BASH List Search Awk

我非常擅长编写脚本并试图用bash来解决问题。 我有一个数据文件,其中包含如下信息:

2   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
4   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1]   1 
8   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
10  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
12  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   
14  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
16  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   
18  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
20  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   
24  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   
26  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   
28  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
30  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1   
32  aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaaa.aaa    11111   aaaa    1111    [1] 1   

其中* a代表各种字母,1代表各种数字。

这些列表都应该从2到32垂直向下计数2,但是很多列表都缺少一些组件,例如我上面发布的那个缺少6和22的组件。我想要做的是编写一个脚本,通过并检查每个数字是否在那里,如果没有,在前面加上一个数字的行,没有其他任何尾随,所以你有:

2   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    
[1] 1   
4   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1]   1 
6

8   aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aa11_1.aaa aaaa.aaa 11111   aaaa    1111    [1] 1      
...

根据我的阅读,我相信AWK功能最有可能成功,但我不确定如何使其工作。 谢谢!

此awk基于2-32(两个)条目的输出索引范围:

awk '{a[$1]=$0} END {for(i=2;i<=32;i+=2) print (i in a ? a[i] : i)}' data

细分:

  • 按索引将所有现有行存储在数组中
  • END ,遍历所有已知索引(2-32)并打印该行或缺少的索引

尝试类似的东西

awk '{
        while( $1 > last_printed + 2) { 
            last_printed+=2; 
            print last_printed;
        }
        print;
        last_printed = $1;
     }' FILENAME

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM