Выравнивание шаблона и удаление всей строки

Я хочу удалить все строки файла 1, если столбец 1 файла 1 точно совпадает с столбцом 1 File2.

Файл 1:

r001:21:10 21 AAAAAATTTGC * = XM:21 r002:21:10 21 YAAAATTTGC * = nM:21 r001:21:10 21 TTAAAATTTGC * = XM:21 r0012:21:10 21 LLAAAATTTGC * + XM:21 r001:21:10 21 AAAAAATTTGC * = GM:21 

File2:

 r001:21:10 r001:21:20 r002:41:36 r002:41:99 r002:41:87 r0012:21:1 

Ожидаемый результат:

 r002:21:10 21 YAAAATTTGC * = nM:21 r0012:21:10 21 LLAAAATTTGC * + XM:21 

Я новичок в этой области и буду благодарен за вашу помощь.

4 Solutions collect form web for “Выравнивание шаблона и удаление всей строки”

Вы можете использовать этот 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} FNR==NR {a[$i]; next} он считывает первый файл и сохраняет содержимое в массив.
  • !($1 in a) при чтении второго файла, он проверяет, находится ли первое поле в массиве. Если нет, печатает строку.

Вы также можете сделать

 $ grep -wvFf file2 file1 r002:21:10 21 YAAAATTTGC * = nM:21 r0012:21:10 21 LLAAAATTTGC * + XM:21 

От man grep :

  -F, --fixed-strings Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. -f FILE, --file=FILE Obtain patterns from FILE, one per line. -v, --invert-match Invert the sense of matching, to select non-matching lines. -w, --word-regexp Select only those lines containing matches that form whole words. The test is that the matching substring must either be at the beginning of the line, or preceded by a non-word constituent character. 

ПРИМЕЧАНИЕ . Однако это приведет к поиску всей строки file1 , а не только первого столбца.

Если порядок вывода не важен, и ваша оболочка поддерживает подстановку процесса (bash does), вы можете использовать join в sorted файлах:

 join -v 1 <(sort -k1,1 file1) <(sort -k1,1 file2) | column -t r0012:21:10 21 LLAAAATTTGC * + XM:21 r002:21:10 21 YAAAATTTGC * = nM:21 

Объяснение: join файлы в первом столбце, -v 1 = выводить несогласованные строки из первого файла. Файлы sorted по первому столбцу -k1,1 . Последний column -t делает довольно печатную.

Похоже, что из другого потока я смог найти ответ, используя этот метод,

Сравнение двух файлов с использованием Unix и Awk

 FNR == NR { f1[$1,$2,$3] = $0 f1_c14[$1,$2,$3] = 1 f1_c5[$1,$2,$3] = $4 next } f1_c14[$1,$2,$3] { if ($4 != f1_c5[$1,$2,$3]) print f1[$1,$2,$3] ; } f1[$1,$2,$3] { if ($4 != f1_c5[$1,$2,$3]) print $0; } 
  • Удалить строку с специальными символами
  • Как удалить символ новой строки из строк, предшествующих определенному шаблону?
  • как переименовать несколько файлов, заменив строку в имени файла? эта строка содержит "#"
  • Как получить JSON STRING из данной строки
  • Вывод процесса `find` обрабатывает определенные поля
  • замените n-й столбец csv-файла с помощью таблицы поиска
  • Обмен неограниченным количеством столбцов
  • значение столбца печати, основанное на совпадении имени столбца в awk / sed
  • Как сопоставить шаблон и заменить только часть шаблона?
  • Шаблон Regex для замены нескольких значений с помощью sed
  • Найти строку в одном разделе файла с несколькими разделами
  • Linux и Unix - лучшая ОС в мире.