Заменить конечные нули полей даты в строке

Ваш 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")}'
0
07.01.2020, 17:34
3 ответа

с файлом

perl -ip -e 's/(\.\d+?)0*(\|)/$1$2/g' "$F"

или с трубой

echo "$V" | perl -pe 's/(\.\d+?)0*(\|)/$1$2/g'
0
28.01.2020, 02:57

Вы можете сделать это как:

perl -F'[|]' -lae 's/\.\d+?\K0+$// for $F[2], $F[4]; print join "|", @F'

(здесь предполагается, что поля даты являются 3-м и 5-м ).

0
28.01.2020, 02:57

Как насчет этого?:

perl -pe 's/(\.\d+?)0*(\D)/$1$2/g'

Ваш образец ввода включает двойные кавычки в начале и конце строки, поэтому, по-видимому, никогда не будет числа с плавающей запятой -в конце строки.

0
28.01.2020, 02:57

Теги

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