2013-09-19 3 views
0

Моя строка кода приведена ниже.Изменение формата для awk

awk 'BEGIN {printf "gnome-terminal"} 
      {printf " --tab -e \"telnet "$4" "$6 " | tee " $1$12"\" -t \"" $1" "$12 "\"" } 
    END {printf "\n"}' temp1.prm >> abc 

Выход дает это в а:

gnome-terminal --tab -e "telnet 10.31.248.104 3007 | tee dutA1MM1" -t "dutA1 MM1" 

Я должен получить ниже формата:

gnome-terminal --tab -e 'bash -c "telnet 10.31.248.104 3007 | tee script1.log"' -t "dutA1 MM1" 

Может кто-нибудь помочь?

+6

Что за цель? Если после этого вы будете выполнять команды 'gnome-terminal', скорее всего, лучший способ сделать то, что вы хотите, чем генерировать команды с awk. –

ответ

1

Попробуйте двойные кавычки в кавычках формат:

awk "BEGIN {printf \"gnome-terminal\"} {printf \" --tab -e 'bash -c \\\"telnet \"\$4\" \"\$6 \" | tee \" \$1\$12\"\\\"' -t \\\"\" \$1\" \"\$12 \"\\\"\" } END { printf \"\\n\"}" temp1.prm >> abc 

Тестирование с echo, аргумент awk бы быть в буквальном смысле

BEGIN {printf "gnome-terminal"} {printf " --tab -e 'bash -c \"telnet "$4" "$6 " | tee " $1$12"\"' -t \"" $1" "$12 "\"" } END { printf "\n"} 
+0

Это не работает для меня Непревзойденный ». – user2796211

+0

@ user2796211 Я действительно делал ошибки раньше. Повторите попытку, а также не используйте вторую. Это только интерпретация. – konsolebox

+0

Произошла одна и та же ошибка – user2796211

1

Не попасть в котировальный кошмар. Вы можете держать вещи аккуратно выглядеть примерно так:

BEGIN { 
    double_quote = "\"" 
    s1 = "gnome-terminal --tab -e 'bash -c " 
    s2 = double_quote "telnet 10.31.248.104 3007 | tee script1.log" double_quote 
    s3 = "' -t dutA1 MM1" 

    printf "%s%s%s\n",s1,s2,s3 
} 
1

Вы, вероятно, хотите что-то вроде этого:

awk '{ printf "gnome-terminal --tab -e \047bash -c \"telnet %s %s | tee script1.log\"\047 -t \"%s %s\"\n", $4, $6, $1, $12 }' file 

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

Смежные вопросы