Измените слово на основе содержимого файла

mv `cat /tmp/list.txt` /app/dest/

(пробелы в начале игнорируются)

0
23.10.2018, 19:04
2 ответа

Позвольте мне сначала обернуть строки в вашей команде:

awk '
    {
        if ($2=="timestamp") {
            $3="dataformat("; 
        };
        print $3 $1 ",'\''YYYY-MM-DD HH'\:'NN'\:'SS'\.'sss)"
        else ($2=="date") {
            $3="dataformat("; 
        };
        print $3 $1 ",'\''YYYY-MM-DD)"
    }
' test.out 

Итак, здесь две проблемы: первая заключается в том, что пункт elseне соответствует пункту if(, вне него находится команда print), а второй заключается в том, что пункт elseне принимает условия, вместо этого вы хотите использовать else if.

Так может быть, это и было задумано?

awk '
    {
        if ($2=="timestamp") {
            $3="dataformat("
            print $3 $1 ",'\''YYYY-MM-DD HH'\:'NN'\:'SS'\.'sss)"
        } else if ($2=="date") {
            $3="dataformat("
            print $3 $1 ",'\''YYYY-MM-DD)"
        }
    }
' test.out 

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

Обратите внимание, что форматирование помогает увидеть, как вложены блоки! Это совершенно допустимый синтаксис, оболочка прекрасно принимает многострочные -строчные одинарные -строки в кавычках, и awk также будет вполне доволен ими. Я рекомендую вам использовать более читаемое форматирование ваших awk-скриптов.

1
28.01.2020, 02:23

Я бы написал:

awk -v q="'" '
    $2 == "timestamp" { $0 = sprintf("dateformat(%s, "q"YYYY-MM-DD HH:NN:SS.sss"q")", $1) }
    $2 == "date"      { $0 = sprintf("dateformat(%s, "q"YYYY-MM-DD"q")", $1) }
                      { print }
' file
2
28.01.2020, 02:23

Теги

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