Скрипт Bash с выводом AWK в CSV - PullRequest
1 голос
/ 10 июня 2019

У меня была потрясающая помощь по сценарию AWK здесь , и я подумал, что было бы очень здорово иметь точно такой же вывод, который я наблюдаю на CLI, чтобы перейти к файлу CSV.Я провел исследование и нашел отличный ответ здесь , он в основном показал код, подобный этому:

awk '{print $1","$2","$3","$4","$5}' < /tmp/file.txt > /tmp/file.csv

Первая проблема, которую я имею, это /tmp/file.txtне нужен, так как мой код уже производит строку с разделенными значениями.Я не знаю, будут ли мои переменные работать без запуска всех новых команд AWK, поэтому я бы предпочел просто пометить их до конца предыдущей команды AWK, если это возможно.Но я не знаю, как реализовать ту же концепцию в реальном сценарии, который я использую.Может ли кто-нибудь показать мне схему форматирования, которая мне понадобится пометить в конце моего скрипта?

Мой постоянно развивающийся скрипт выглядит так:

#!/bin/bash
CURRENT_DATE=`date +%Y-%m-%d`
tail -fn0 /var/log/pi-star/MMDVM-"$CURRENT_DATE".log | gawk '
match($0, /received.*voice header from ([[:alnum:]]+) to ([[:alnum:]]+ 
[0-9]+)/, a) {
in_record = 1
call_sign = a[1]
channel = a[2]
}
in_record && match($0, /DMR ID: ([0-9]+)/, a) {
dmr_id = a[1]
}
in_record && match($0, /([0-9.]+) seconds, ([0-9]+)% packet loss, BER: 
([0-9.]+)%/, a) {
in_record = 0
print call_sign, channel, dmr_id, a[1], a[2], a[3]
}
' OFS=,
done

Я все еще хочу отслеживать черезтерминал, я просто думаю, что добавленный вывод в CSV будет глазурью на торте.Я обдумываю это?Это должен быть отдельный скрипт?Если да, то как?

1 Ответ

0 голосов
/ 10 июня 2019

После публикации вопроса с лучшим описанием в другой ветке кто-то ответил правильным ответом. Он сказал, что в основном я вижу, как awk буферизирует вывод, когда он идет в конвейер (так как это требует меньших накладных расходов), но записывает его сразу, когда он идет в TTY. Затем он предложил решение, вызвав fflush () из программы awk.

"Вызовите fflush (), после вашей команды печати добавьте дополнительную команду fflush ()."

Это исправило это. Спасибо всем за ваши усилия.

...