слияние двух файлов согласно указанной строке

Вот как я меняю все расширения файлов в текущем каталоге Debian.

rename "s/oldExtension$/newExtension/" *.txt

(Это команда Perl rename , а не команда util-linux . См. Почему утилита переименования в Debian / Ubuntu отличается от той, что используется в других дистрибутивах , например CentOS? )

2
25.08.2018, 13:55
2 ответа

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

awk 'NR==FNR{ (NR%2? keyword=$0: seen[keyword]=$0 ); next}  
     { for (keys in seen)if ($0 ~ keys) {print $0, seen[keys] }
}' OFS='\n' file1  file2

Выход:

This is a search tool
http://google.com
This is your mail account
https://gmail.com

объяснение:

если это первый файл NR==FNRи номер записи/строки четный NR%2сохранить всю строку $0в переменной с именем keyword, иначе добавить эту строку в связанный массив с именем seenс ключевым словом, найденным как это индекс, затем прочитайте строку next.

... после перехода к первому файлу,с помощью for-loopмы просматриваем массив , увиденный и переменную keys, используемую для указания на элементы индексов этого массива, и проверяем, может ли это keysсовпадать в строках в file2, затем print $0, что tine, за которым следует значение его ключа через seen[keys], разделенное линией \n.

0
27.01.2020, 22:31

Попробуйте также

awk '
NR == FNR   {T[$0]
             next
            }
            {for (t in T) if (t ~ $1) $1 = t
            }
1
' file2 file1
This is a search tool
http://google.com
This is your mail account
https://gmail.com
0
27.01.2020, 22:31

Теги

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