I'm very new to scripting and trying to work something out in bash. I have a data file filled with information that looks like this:
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
Where the *a's represent various letters and the 1's represent various numbers.
The lists are all supposed to go down vertically from 2 to 32 counting by 2's, however a lot of the lists are missing a couple components, such as the one I posted above which is missing 6 and 22. What I am trying to do is write a script that would go through and check to see if each number is there, and if not, add a line with the number at the front and nothing else trailing, so you'd have:
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
...
From what I have read I believe the AWK function will be the most likely to succeed, however I'm not sure how to make it work. Thanks!
This awk is based on the output index range of 2-32 (by two) entries:
awk '{a[$1]=$0} END {for(i=2;i<=32;i+=2) print (i in a ? a[i] : i)}' data
The breakdown:
END, walk all known indexes (2-32) and either print the line, or the missing indexIf you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With