Ответ 1
Вам нужно установить переменную OFS
(разделитель выходных полей) как вкладку:
echo "$line" |
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'
(убедитесь, что вы указываете переменную $line
в выражении эха)
Как выбрать первый столбец из строки, разделенной 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
Вам нужно установить переменную OFS
(разделитель выходных полей) как вкладку:
echo "$line" |
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'
(убедитесь, что вы указываете переменную $line
в выражении эха)
Убедитесь, что они действительно являются вкладками! В bash вы можете вставить вкладку, используя C-v TAB
$ echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
LOAD_SETTLED
Вы можете установить полевой разделитель:
... | awk 'BEGIN {FS="\t"}; {print $1}'
Отлично прочитано:
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 $1 "\t" var "\t" $3 }'
Если это не работает?
echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk '{print $1}'