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   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) 并打印该行或缺失的索引

关于macos - BASH 列表搜索 Awk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270231/

相关文章:

awk 根据列合并行

multithreading - 我可以使用 Grand Central Dispatch 将任务分派(dispatch)到 OSX DisplayLink 线程吗?

objective-c - 使用 [NSBundle loadNibNamed :owner:] but the window does not appear in the foreground 加载 NIB

linux - 如何使用 bash 脚本从多个服务器获取 java 版本/spark 版本/pip 列表和 anaconda 列表

regex - 使用 grep 查找具有超过 1 个匹配项的文件

linux - awk 递增或更改文件中列的值

macos - 全屏 Cocoa 应用程序视网膜支持

xcode - 安装 Xcode 后,clang 在哪里?

linux - 如何在 ubuntu 中使用 bash 从日志或命令结果中获取需要粘贴到文件的字符串

bash - 将 awk 的结果放入数组中