я в `cat file` читал переменную из регулярного выражения AWK - PullRequest
0 голосов
/ 15 января 2019

Так что я должен следующий bash code:

for i in `cat list1.txt`; do
  cat list2.txt |awk '/$i/{flag=1;next}/Flag2/{flag=0}flag'
done

Конечно, $ i не работает, потому что его нужно правильно передать из bash в AWK, проблема в том, что я пробовал несколько вещей, с -v и т. Д., Но это не сработало. Мысли? * * 1004

1 Ответ

0 голосов
/ 15 января 2019

Первый, ср. эта страница , чтобы объяснить, почему не стоит использовать

for i in `cat list1.txt`

... когда-нибудь. * * 1006

Во-вторых, это , почему бы не использовать

cat list2.txt | awk ...

Извините за арфу. Теперь ... попробуй

while read -r val || [[ -n "$val" ]] 
do awk "/$val/ { flag=1; next } /Flag2/ { flag=0 } flag" list2.txt
done < list1.txt

awk в двойных кавычках ... не идеально. Или, как предлагает Чарльз, используйте -v (всегда слушайте Charles & Ed ...)

while read -r val || [[ -n "$val" ]] 
do awk -v i="$val" '
     $0 ~ i  { flag=1; next } 
     /Flag2/ { flag=0; }
     flag
   ' list2.txt
done < list1.txt

Все еще жду образцов файлов. Пожалуйста, , взгляните на формат этих файлов, чтобы я мог запустить действительный тест.

Обратите внимание, что || [[ -n "$val" ]] требуется только в том случае, если есть вероятность, что в последней записи не будет перевода строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...