Разделенные табуляцией значения в awk
Как выбрать первый столбец из строки, разделенной вкладкой?
# echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F't' '{print }'
выше будет возвращена вся строка, а не только "LOAD_SETTLED", как ожидалось.
обновление:
мне нужно изменить третий столбец на вкладке разделенные значения.
Следующее не работает.
echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ t]+" } ; { print var }' >> /pdump/temp.txt
это, однако, работает, как ожидалось, если разделитель запятая вместо табуляции.
echo $line | awk -v var="$mycol_new" -F't' '{print "," "," var "," "," "," "," "," "," "}' >> /pdump/temp.txt
6 ответов:
вам нужно установить
OFSпеременная (разделитель выходного поля) для табуляции:echo "$line" | awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} { = var; print}'(убедитесь, что вы цитируете
$lineпеременная в операторе echo)
убедитесь, что они действительно вкладки! В bash, вы можете вставить вкладку с помощью C-V TAB
$ echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F$'\t' '{print }' LOAD_SETTLED
вы можете установить разделитель полей:
... | awk 'BEGIN {FS="\t"}; {print }'отлично читать:
https://docs.freebsd.org/info/gawk/gawk.info.Field_Separators.html
echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print "\t" var "\t" }'
Я использую
FSиOFSпеременные для управления файлами зоны привязки с разделителями табуляции. Вот один из моих сценариев https://gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39мясо это:
awk -v FS='\t' -v OFS='\t' \ -v record_type=$record_type \ -v hostname=$hostname \ -v ip_address=$ip_address ' ==hostname && ==record_type {=ip_address} {print} ' $zone_file > $tempЭто чистый и простой для чтения способ сделать это.
Comments