обработка несколько файлов с проблемой awk

Я бы предложил использовать опцию "-q -o "BatchMode=yes"", а также использовать аутентификацию с открытым ключом.

Также подумайте об одиночных кавычках в команде, которую вы хотите запустить на удаленном сервере, чтобы избежать любых проблем, связанных с возможной локальной интерпретацией данной команды.

Например: ssh -q -o "BatchMode=yes" user@server 'ls -al'

Это довольно распространенная техника (вложенный ssh). Нет проблем с реализацией этого.

0
15.04.2018, 22:30
1 ответ

Потому что у вас есть nextв блоке с условием FILENAME != f && $2 ~ /[0-9]+/. Эта строка thrне соответствует этому условию, поэтому попадает в блок «каждая строка». Там $1 нет в a, поэтому вводится блок elseи печатается строка.

Я уверен, что вы смогли бы понять это сами, если бы просто использовали разумные отступы, чтобы вы действительно видели свою программу:

awk -F':' -vf=main '
    FILENAME == f {m = $0}
    FILENAME != f && $2 ~ /[0-9]+/ {
        if ($2 ~ /[0-9]+/ && (!($1 in a) || $3 > a[$1])) { 
            a[$1] = $3
            b[$1] = $0 
        } 
        next
    }
    {
        if (($1 in a) && (a[$1] > $3)) { 
            print b[$1]":updated:"m
            delete b[$1] 
        } else 
            print
    }
' file* main
3
28.01.2020, 02:23

Теги

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