Comment sélectionner la première colonne de la chaîne séparée par une tabulation?
# echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F'\t' '{print $1}'
Ce qui précède renverra la ligne entière et pas seulement "LOAD_SETTLED" comme prévu.
Mise à jour:
Je dois changer la troisième colonne dans les valeurs séparées par des tabulations. Ce qui suit ne fonctionne pas.
echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt
Cela fonctionne cependant comme prévu si le séparateur est une virgule au lieu de tabulation.
echo $line | awk -v var="$mycol_new" -F'\t' '{print $1 "," $2 "," var "," $4 "," $5 "," $6 "," $7 "," $8 "," $9 "}' >> /pdump/temp.txt
Vous devez définir la variable OFS
(séparateur de champ en sortie) comme un onglet:
echo "$line" |
awk -v var="$mycol_new" -F $'\t' 'BEGIN {OFS = FS} {$3 = var; print}'
(assurez-vous de citer le $line
variable dans l'instruction echo)
Assurez-vous qu'ils sont vraiment des onglets! En bash, vous pouvez insérer un onglet en utilisant C-v TAB
$ echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F$'\t' '{print $1}'
LOAD_SETTLED
Vous pouvez définir le séparateur de champ:
... | awk 'BEGIN {FS="\t"}; {print $1}'
Excellente lecture:
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 }'
J'utilise les variables FS
et OFS
pour manipuler les fichiers de zone BIND délimités par des tabulations. Voici un de mes scripts https://Gist.github.com/RichardBronosky/abe1652c2d5c78c35b92ad02bdf0d0af#file-dns_update-sh-L36-L39
La viande en est:
awk -v FS='\t' -v OFS='\t' \
-v record_type=$record_type \
-v hostname=$hostname \
-v ip_address=$ip_address '
$1==hostname && $3==record_type {$4=ip_address}
{print}
' $zone_file > $temp
C'est une façon propre et facile à lire de le faire.
Cela ne devrait-il pas fonctionner?
echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk '{print $1}'