Удаление строк из большого файла, если строки в списке находятся в первых 12 символах строки?

На Debian расширение RANDR было включено в xvfb/2:1.18.0, загруженном в "unstable" в конце января 2016 г.

1
25.05.2019, 01:21
2 ответа

Попробуйте:

$ awk 'FNR==NR{ids[$1]; next} !($1 in ids)' ids file
denovo10 someverylaaargenumbers and lotandlotsoftextuntil 5400........
denovo10000 someverylaaargenumbers and lotandlotsoftextuntil 5400.....
denovo184117 someverylaaargenumbers and lotandlotsoftextuntil 5400......

Как это работает:

  • FNR==NR{ids[$1]; next}

    При чтении первого файла idsсоздается ключ в ассоциативном массиве idsс идентификатором. Затем он пропускает остальные команды и переходит к строке next.

  • !($1 in ids)

    При чтении второго файла печатает строку, если первое поле не является ключом в ассоциативном массиве ids.

Чтобы обновить исходный файл

Когда вы убедитесь, что код работает правильно, файл можно изменить:

awk 'FNR==NR{ids[$1]; next} !($1 in ids)' ids file >tmp && mv tmp file
0
27.01.2020, 23:41

Сgrep:

grep -vwf file matrix > matrix.new
mv matrix.new matrix
  • опция -f FILEиспользовать FILEв качестве входного файла шаблона
  • опция -wвыбрать только те строки, содержащие совпадения, которые образуют целые слова
  • опция -vвыбрать не совпадающие -строки

Обратите внимание, что fileне должен содержать пустых строк.

Или, если вы создадите свой файл идентификатора вручную с привязкой ^для соответствия началу строки и символом пробела после каждого идентификатора, чтобы отметить конец шаблона:

printf '^%s \n' denovo{1,100,1000,100000} > file
grep -vf file matrix > matrix.new
mv matrix.new matrix
1
27.01.2020, 23:41

Теги

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