GNU/Linux >> Linux Esercitazione >  >> Linux

Come scorrere le righe di un file?

Supponiamo di avere questo file:

hello
world
hello world

Questo programma

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

uscite

tester: hello
tester: world
tester: hello
tester: world

Vorrei avere il for scorrere su ogni riga individualmente ignorando gli spazi bianchi, ad es. le ultime due righe dovrebbero essere sostituite da

tester: hello world

Usando le virgolette for i in "$(cat $1)"; risulta in i viene assegnato l'intero file in una volta. Cosa devo cambiare?

Risposta accettata:

(9 anni dopo:)
Entrambe le risposte fornite fallirebbero sui file senza una nuova riga alla fine, questo salterà effettivamente l'ultima riga, non produrrà errori, porterebbe al disastro (appreso a fatica:).

La migliore soluzione concisa che ho trovato finora è "Just Works" (sia in bash che in sh):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

Per una discussione più approfondita, vedere questa discussione StackOverflow:come usare "mentre leggi" (Bash) per leggere l'ultima riga in un file se non c'è una nuova riga alla fine del file?

Attenzione:questo approccio aggiunge una nuova riga aggiuntiva all'ultima riga se non ce n'è già una.


Linux
  1. Come inserire del testo prima della prima riga di un file?

  2. Come contare il numero di righe in un file dopo una corrispondenza Grep?

  3. Come utilizzo le righe di un file come argomenti di un comando?

  4. Come leggere la penultima riga in un file usando Bash?

  5. Come usare sed per rimuovere le ultime n righe di un file

Come rimuovere le righe da un file usando il comando Sed

Come trovare le righe più lunghe in un file in Linux

Come posso eseguire il loop sull'output di un comando di shell?

Come inserisco il testo nella prima riga di un file usando sed?

Come cancellare il contenuto di un file dalla riga di comando?

Come stampare l'ultima riga di un file compresso gz nella riga di comando?