Supposons que vous souhaitiez remplacer la ligne 4 par le texte "différent". Vous pouvez utiliser AWK comme ceci:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK considère l'entrée comme étant des "enregistrements" divisés en "champs". Par défaut, une ligne correspond à un enregistrement. NR
est le nombre d'enregistrements vus. $0
représente l'enregistrement complet actuel (while $1
est le premier champ de l'enregistrement et ainsi de suite; par défaut, les champs sont des mots de la ligne).
Ainsi, si le numéro de ligne actuel est 4, imprimez la chaîne "différent" mais sinon imprimez la ligne inchangée.
Dans AWK, le code de programme inclus dans { }
s'exécute une fois sur chaque enregistrement d'entrée.
Vous devez citer le programme AWK entre guillemets simples pour empêcher le shell d'essayer d'interpréter des choses comme le $0
.
EDIT: Un programme AWK plus court et plus élégant de @chepner dans les commentaires ci-dessous:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Uniquement pour l'enregistrement (c'est-à-dire la ligne) numéro 4, remplacez l'ensemble de l'enregistrement par la chaîne «différent». Ensuite, pour chaque enregistrement d'entrée, imprimez l'enregistrement.
De toute évidence, mes compétences AWK sont rouillées! Merci, @chepner.
EDIT: et voir aussi une version encore plus courte de @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Comment cela fonctionne est expliqué dans les commentaires: le 1
évalue toujours vrai, donc le bloc de code associé s'exécute toujours. Mais il n'y a pas de bloc de code associé, ce qui signifie qu'AWK effectue son action par défaut consistant simplement à imprimer la ligne entière. AWK est conçu pour autoriser des programmes laconiques comme celui-ci.