Подтвердить что ты не робот

Разделенные вкладки в awk

Как выбрать первый столбец из строки, разделенной TAB?

# echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F'\t' '{print $1}'

Приведенное выше вернет всю строку, а не только "LOAD_SETTLED", как ожидалось.

Update:

Мне нужно изменить третий столбец в значениях, разделенных вкладкой. Не работает.

echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt

Это работает, как и ожидалось, если разделитель является запятой, а не вкладкой.

echo $line | awk -v var="$mycol_new" -F'\t' '{print $1 "," $2 "," var "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "}' >> /pdump/temp.txt
4b9b3361

Ответ 1

Вам нужно установить переменную OFS (разделитель выходных полей) как вкладку:

echo "$line" | 
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'

(убедитесь, что вы указываете переменную $line в выражении эха)

Ответ 2

Убедитесь, что они действительно являются вкладками! В bash вы можете вставить вкладку, используя C-v TAB

$ echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
LOAD_SETTLED

Ответ 4

echo "LOAD_SETTLED    LOAD_INIT       2011-01-13 03:50:01" | awk -v var="test" 'BEGIN { FS = "[ \t]+" } ; { print $1 "\t" var "\t" $3 }'

Ответ 5

Если это не работает?

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