Концепции массива сценариев Bash

Вы можете использовать этот awk :

$ awk 'FNR==NR {a[$i]; next}; !($1 in a)' f2 f1
r002:21:10    21    YAAAATTTGC     *     =    nM:21
r0012:21:10   21    LLAAAATTTGC    *     +    XM:21

Пояснение

  • FNR == NR {a [$ i]; next} он читает первый файл и сохраняет его содержимое в массив a .
  • ! ($ 1 в a) при чтении второго файла проверяется, находится ли первое поле в массиве a . Если нет, печатает строку.
3
02.10.2018, 00:40
2 ответа

Объедините оба списка вместе, используя paste. Вы можете сделать это следующим образом:

#!/bin/bash
paste list1 list2 | while IFS=$'\t' read -r L1 L2    
do
echo "
Object host ${L1} {
     import = "generic-service"
     address = ${L2}
     group = "Mom01-Ping"
     }"   
done 

выход:

Object host sjc02-mfg-api01.example.com  {
     import = generic-service
     address = 10.20.2.22 
     group = Mom01-Ping
     }

Object host sjc02-mfg-api02.example.com {
     import = generic-service
     address = 10.20.2.23 
     group = Mom01-Ping
     }

Object host sjc02-mfg-api03.example.com {
     import = generic-service
     address = 10.20.2.24
     group = Mom01-Ping
     }
5
27.01.2020, 21:12

Вы можете перебирать индексы пары массивов:

a1=(foo bar baz)
a2=(one two three)

for ((i=0; i < "${#a1[@]}"; i++)); do 
    echo "${a1[i]} => ${a2[i]}"
done

где ${#a1[@]}размер массива a1

2
27.01.2020, 21:12

Теги

Похожие вопросы