Чтобы ответить на ваш вопрос: я хотел бы использовать AWK. Однако, вероятно, я бы использовал python и одно регулярное выражение для захвата всех параметров в словаре.
Бонус: Я сделал упражнение делать то, что вы хотите в Баш с помощью Grep ГНУ (то регэкспы вам нужно, может изменяться в качестве выходного сигнала iwconfig зависит от устройства):
SLEEP=10 # time to sleep between samples
while true; do # or launch it as a cron task
TIMESTAMP=$(date +'%s')
IW=$(iwconfig wlan0)
# capture each parameter in a variable
IEEE=$(echo "$IW" | grep -oP '(?<=IEEE).[^\s]*')
ESSID=$(echo "$IW" | grep -oP '(?<=ESSID:).[^\s]*')
BITRATE=$(echo "$IW" | grep -oP '(?<=Bit Rate=)\d+\s.[^\s]+(?=[\s]+Tx)')
TXPOWER=$(echo "$IW" | grep -oP '(?<=Tx-Power=)\d+\s.*')
RLL=$(echo "$IW" | grep -oP '(?<=limit:)\d')
RTSTHR=$(echo "$IW" | grep -oP '(?<=RTS thr:).+(?=[ ]+Fra)')
FRAGTHR=$(echo "$IW" | grep -oP '(?<=Fragment thr:).+')
TXPOWER=$(echo "$IW" | grep -oP '(?<=Tx-Power=)\d+ .*')
PM=$(echo "$IW" | grep -oP '(?<=Management:).*')
LQ=$(echo "$IW" | grep -oP '(?<=Quality=)\d+/\d+')
SIGLEV=$(echo "$IW" | grep -oP '(?<=level=).*')
RXNWID=$(echo "$IW" | grep -oP '(?<=nwid:)\d+')
RXCRYPT=$(echo "$IW" | grep -oP '(?<=crypt:)\d+')
RXFRAG=$(echo "$IW" | grep -oP '(?<=frag:)\d+')
RTERET=$(echo "$IW" | grep -oP '(?<=retries:)\d+')
RTIMISC=$(echo "$IW" | grep -oP '(?<=misc:)\d+')
RTMBEAC=$(echo "$IW" | grep -oP '(?<=beacon:)\d+')
#line
echo $TIMESTAMP,$BITRATE,$LQ,$SIGLEV,$RTMBEAC,...
sleep $SLEEP
done
Пример вывода :
1331848207,54 Mb/s,70/70,-37 dBm ,0,...
1331848217,54 Mb/s,70/70,-35 dBm ,0,...
1331848227,54 Mb/s,70/70,-34 dBm ,0,...
1331848237,54 Mb/s,70/70,-39 dBm ,0,...
1331848247,54 Mb/s,70/70,-35 dBm ,0,...
1331848257,54 Mb/s,70/70,-37 dBm ,0,...
sed звучит так, как будто это выполнит работу (при условии, что у вас нет сложных правил экранирования для пробелов внутри строк). –
sed хороший. cut может быть неэффективен, потому что его -d = DELIM требует один разделитель, поэтому два пробела могут выглядеть как дополнительное поле. Можете ли вы опубликовать ввод? – octopusgrabbus
Пожалуйста, введите пример ввода. Однако разделитель полей awk по умолчанию - «whitespace», поэтому это не проблема, а это всего 2 пробела. –