109 votes

Onglet valeurs séparées dans AWK

Comment sélectionner la première colonne de la chaîne séparée par un ONGLET ?

# 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 l'onglet valeurs séparées. 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 l'onglet.

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

156voto

glenn jackman Points 69748

Vous devez définir la variable OFS (séparateur de champ de sortie) comme un onglet :

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

(assurez-vous de citer la variable $line dans l'instruction ECHO)

23voto

Mahmoud Abdelkader Points 5622

Assurez-vous que ce sont vraiment des onglets ! Dans bash, vous pouvez insérer un onglet en utilisant L'ONGLET C-V

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

21voto

Richard Bronosky Points 3163

Utilisation :

awk -v FS='\t' -v OFS='\t' ...

Exemple tiré d'un de mes scripts.

J'utilise les variables FS et OFS pour manipuler les fichiers de zone de LIAISON, qui sont délimités par des tabulations :

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 un moyen propre et facile à lire pour le faire.

18voto

John Kloian Points 437

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

6voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X