Что ж, часть обучения использованию 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++]}'
Эта часть выполняется после того, как последняя строка последнего файла была прочитана и обработана.
С этими основами вы сможете сами понять значение различных блоков кода и переменных.