Come posso aggiungere un numero di riga e una scheda all'inizio di ogni riga di un file di testo?
Come posso aggiungere un numero di riga e una scheda all'inizio di ogni riga di un file di testo?
Risposte:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'.
nlè SBAGLIATA. Nel codice sorgente, non ti darà mai i numeri di riga giusti, poiché non conta le righe con solo spazi bianchi.
Il comando nl dovrebbe farlo, ma aggiunge spazio anche prima del numero di riga. Fa parte dei coreutils di Linux.
nl lines.txt
1 $bkWTN
2 $cV8$.
nldi omettere lo spazio prima del numero. Basta usare l' -w1opzione per dirgli che la larghezza minima per un numero è 1.
-nlnte puoi giustificare a sinistra se non vuoi gli spazi prima dei numeri di riga. Inoltre, per specificare un separatore di schede è possibile utilizzare -s$'\t'o -s' '(inserire una scheda tra le virgolette singole con ctrl+vallora tab).
nl -w1(da GNU coreutils 8.24) non tronca i numeri di linea.
sed = test.txt | sed 'N;s/\n/\t/'
Il comando "sed =" stamperà il numero di riga seguito da un ritorno a capo e quindi dalla riga successiva.
L'espressione "N; s / \ n / \ t /" prenderà ogni riga, otterrà la riga successiva (ovvero il numero di riga e la riga) e sostituirà il ritorno a capo con una scheda.
\nè un feed di riga (comunemente chiamato solo "newline", poiché il suo primo utilizzo diffuso era in Unix), ed \rè il ritorno a capo. Windows utilizza \r\n(noto anche come CRLF).
Che ne dite di
cat -n somefile.txt
?
OK, ecco una soluzione bash a una riga:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
La prima impostazione IFS dice a bash di leggere una riga intera alla volta. La seconda riga ripristina l'IFS sul valore predefinito.
Come bonus aggiuntivo, viene eseguito completamente nella shell e non esegue un programma!
Ok, dal momento che stiamo raccogliendo modi per farlo,
grep -n . file.txt | sed 's/\(^[0-9]*\):/\1 /g'
# this is a tab with Ctrl-V + Tab =====> ----
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'
o per alcuni non GNU sed:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'