Ваш awk
скрипт:
awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80")}"
В скрипте есть проблема с цитированием:
Скрипт заключен в двойные кавычки, и он также использует двойные кавычки. Внутренние двойные кавычки вызовут проблемы.
Решение состоит в том, чтобы написать скрипт в одинарных кавычках(awk
скрипты всегда должны быть в одинарных кавычках, чтобы $0
и т.д. не интерпретировались оболочкой):
awk '{system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'
Вы также можете легко переместить два последних grep
вызова в скрипт awk
:
awk '/ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80");}'
Приложив немного усилий, вы сможете получить и первую:
awk -v arg1="$1" 'match($0, arg1) && /ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'
с файлом
perl -ip -e 's/(\.\d+?)0*(\|)/$1$2/g' "$F"
или с трубой
echo "$V" | perl -pe 's/(\.\d+?)0*(\|)/$1$2/g'
Вы можете сделать это как:
perl -F'[|]' -lae 's/\.\d+?\K0+$// for $F[2], $F[4]; print join "|", @F'
(здесь предполагается, что поля даты являются 3-м -м и 5-м -м).
Как насчет этого?:
perl -pe 's/(\.\d+?)0*(\D)/$1$2/g'
Ваш образец ввода включает двойные кавычки в начале и конце строки, поэтому, по-видимому, никогда не будет числа с плавающей запятой -в конце строки.