Что ж, часть обучения использованию Unix - выяснить, что делают существующие скрипты. В этом случае вам нужно немного узнать о том, как awkработает код. Я сосредоточусь на описании этой awkчасти, это должно помочь вам разобраться с остальными.
По сути awk, это язык сценариев на основе шаблонов, где команды состоят из шаблона (условия поиска) и соответствующего блока кода. Во время выполнения любые входные файлы читаются построчно, и если шаблон / условие истинно для строки, выполняется кодовый блок. Есть специальные модели BEGINи ENDкоторые используются для запуска кода , чтобы выполняться до того первой линии или после того, как последняя строка читается.
В вашем примере у вас есть три строки шаблона / кода:
NR==FNR {a[i++]=$0};
NRи FNRдве специальные переменные, установленные awk. Вы можете посмотреть их значение, man awkчтобы увидеть, что
NR ordinal number of the current record
FNR ordinal number of the current record in the current file
поэтому в основном это условие истинно, в то время как строки из первой строки считываются (что означает, что a[i++]=$0выполняется один раз для каждой строки из первого файла) и ложно для всех дополнительных файлов. $0текущая строка ввода.
{b[x++]=$0;};{k=x-i};
Этот блок кода не имеет условия / шаблона, поэтому он выполняется для каждой прочитанной строки (из всех файлов, включая первый).
END {for(j=0;j<i;) print a[j++],b[k++]}'
Эта часть выполняется после того, как последняя строка последнего файла была прочитана и обработана.
С этими основами вы сможете сами понять значение различных блоков кода и переменных.