Как использовать awk или sed для разделения файла на 2 части на основе списка значений?

#bash #awk #sed

Вопрос:

У меня есть два файла. Одним из них является основной файл, который содержит множество столбцов. Другой содержит информацию о списке образцов. Теперь я хотел бы разделить основной файл на 2 части, в зависимости от того, находится образец (строка) в списке второго файла или нет. Теперь я использую код следующим образом

 awk 'NR == FNR {a[$1]; next} !($1 in a)' $i.list $i > no_in_list.$i
 

чтобы исключить образец, который в списке, но мне было интересно, можно ли также сохранить образцы, которые в списке.

Комментарии:

1. GNU awk (по крайней мере) может печатать в указанном файле вместо стандартного вывода ( print ... >> file ). Поможет ли это?

2. @RenaudPacalet Извините, я на самом деле не знаком с awk. Не могли бы вы привести мне пример? Спасибо

Ответ №1:

Вы можете использовать print >> "file" действие для печати в указанном файле вместо стандартного вывода (проверено с GNU awk):

 awk -v nil="no_in_list.$i" -v il="in_list.$i" '
  NR == FNR {a[$1]; next}
  !($1 in a) {print >> nil}
  ($1 in a) {print >> il}' $i.list $i