Напечатать общую строку в обоих файлах с помощью команды оболочки

Вы можете добиться этого с помощью GNU sed, как показано ниже, учитывая, что диапазон, который вы хотите заменить, включает5~12(включительно )в качестве примера и предполагая, что #не встречается в вашем файле вообще. (или используйте другой символ вместо #, чтобы гарантировать, что это не произойдет ), тогда вы можете сделать:

sed 's/ /#/13g; s/ /x/5g ; s/#/ /g' infile
  • s/ /#/13g, заменяет все пробелы в 13 й позиции до конца на#
  • s/ /x/5g, заменяет все пробелы в позиции 5 й до конца (, что будет до 12 й позиции )на x.
  • s/#/ /g, вернуть обратно все пробелы.
0
05.03.2020, 12:51
1 ответ

Строго говоря, нас интересуют не общие строки(в заданных данных )нет общих строк, а пересечение данных по первому столбцу.

Использованиеjoin:

$ join -t, File1 File2
13,abc,xyz
14,def,ghi
15,klm,opq

Утилита joinвыполняет эффективную реляционную (внутреннюю )операцию JOIN между двумя файлами, которым задано собственное поле в каждом (по умолчанию первое поле ). Я использую его с -t,, чтобы указать, что запятые являются разделителями полей в файлах, (в противном случае используются любые пробелы ). Команда по умолчанию создаст пересечение на основе первого поля обоих файлов.

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

join -t, <( sort File1 ) <( sort File2 )

если ваша оболочка поддерживает подстановку процессов.

3
28.04.2021, 23:21

Теги

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