Разделенные табуляцией значения в 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
598   6  
awk

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

Это чистый и простой для чтения способ сделать это.

это не должно работать?

echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk '{print }'

Comments

    Ничего не найдено.