Supponiamo che tu voglia sostituire la riga 4 con il testo "diverso". Puoi usare AWK in questo modo:
awk '{ if (NR == 4) print "different"; else print $0}' input_file.txt > output_file.txt
AWK considera l'input come "record" diviso in "campi". Per impostazione predefinita, una riga è un record. NR
è il numero di record visti. $0
rappresenta il record completo corrente (mentre $1
è il primo campo del record e così via; per impostazione predefinita, i campi sono parole della riga).
Pertanto, se il numero di riga corrente è 4, stampare la stringa "diverso", ma altrimenti stampare la riga invariata.
In AWK, il codice del programma racchiuso { }
viene eseguito una volta su ciascun record di input.
Devi citare il programma AWK tra virgolette singole per evitare che la shell provi a interpretare cose come la $0
.
EDIT: un programma AWK più breve ed elegante di @chepner nei commenti qui sotto:
awk 'NR==4 {$0="different"} { print }' input_file.txt
Solo per il record (es. Riga) numero 4, sostituire l'intero record con la stringa "diverso". Quindi, per ogni record di input, stampare il record.
Chiaramente le mie abilità in AWK sono arrugginite! Grazie, @chepner.
EDIT: e vedi anche una versione ancora più breve di @Dennis Williamson:
awk 'NR==4 {$0="different"} 1' input_file.txt
Il modo in cui funziona è spiegato nei commenti: il valore è 1
sempre true, quindi il blocco di codice associato viene sempre eseguito. Ma non esiste un blocco di codice associato, il che significa che AWK esegue la sua azione predefinita semplicemente stampando l'intera riga. AWK è progettato per consentire programmi concisi come questo.