J'essaie de modifier une colonne de mon file, puis d'imprimer le résultat.
awk -F"|" '{ if(NR!=1){$5 = $5+0.1} print $0}' myfile
Il fait ce que je veux, mais lors de l'printing, seule la première ligne conserve son séparateur de champ (celui-ci, je ne le modifie pas).
Donc, je pourrais utiliser l' print $1"|"$2"|"$3"|"$4"|"$5"|"...
(Par exemple si je ne connais pas les numéros de colonne)
Je crois, je pourrais résoudre mon problème facilement avec sed
, mais j'essaie d'apprendre awk
pour le moment.
@Sukminder a déjà donné la réponse simple; J'ai quelques points de style et une syntaxe utile à propos de votre exemple de code (comme une révision de code). Cela a commencé comme un commentaire, mais ça devenait long.
OFS
est le séparateur de champ de sortie, comme déjà mentionné.
$0
est l'argument par défaut à print
– pas besoin de le spécifier explicitement. Et un autre sharepoint style: awk
a ce qu'on appelle des "patterns", qui sont comme des blocs conditionnels embeddeds. Donc, vous pouvez également utiliser:
awk -F'|' 'BEGIN {OFS = FS} NR != 1 {$5 += 0.1} {print}' myfile
Vous pouvez définir le séparateur de champ de sortie , OFS
.
'BEGIN { OFS = "|" } ...'
Ou:
'BEGIN { OFS = FS } ...'
C'est <space> par défaut.