Macos BASH列表搜索Awk

Macos BASH列表搜索Awk,macos,bash,awk,Macos,Bash,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

我对编写脚本和尝试在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 '{
        while( $1 > last_printed + 2) { 
            last_printed+=2; 
            print last_printed;
        }
        print;
        last_printed = $1;
     }' FILENAME

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


awk'{a[$1]=$0}{END{for(i=2;iokay)如果您不能使用
*
作为数据示例,请显示实际数据(数字、字母表等)使用您介绍的内容将得到令人惊叹的回答,因为
*
都是正则表达式语法的一部分。解决这个问题后,我将撤销您问题的-1。我认为这似乎是一个完美的方案,只需逐行阅读并检查您所在的行是否以您期望的数字开头。它将uld是插入该行并可能将其写入某个临时文件的最简单方法。很抱歉,这是我的错误。但是,我不认为仅仅出于隐私考虑就允许我发布实际数据。是否有更好的方法可以使用*表示它们?句点实际上是数据集的一部分,因此我认为它们不需要需要更改。@tmanion这是我们到目前为止一直在做的事情,但是有很多这样的文件,为了加快进程,我一直在试图找出一个脚本来自动化进程。@ahmedmasud希望这会更好!所以这让一些非常奇怪的事情发生了,在终端开始显示大量奇怪的、复杂的不断增加的数字。老实说,不太确定发生了什么,但奇怪的事情发生了。对不起,我在while循环中遇到了错误的情况。我已经修复了它,现在应该可以工作了。出于某种原因,这只是显示最后一行(32)在列表中,有什么想法吗?很好,但你需要将其存储在内存中。@klashxx-是的,但这似乎完全可以接受,最多16行。太棒了!唯一的问题是出于某种原因,它去掉了除第一行以外的所有数字后面的尾随数据,并将最初的2变成了32。有什么想法如何解决这些问题吗?@user3735358-它对我来说很好,从问题中复制和粘贴数据。我会进行编辑,这可能会对你有所帮助,或者它可能是输入文件的格式。是的,格式一定有问题,因为它现在工作得很好。非常感谢!
awk '{a[$1]=$0} END {for(i=2;i<=32;i+=2) print (i in a ? a[i] : i)}' data