Como posso acrescentar um número de linha e uma guia ao início de cada linha de um arquivo de texto?
Como posso acrescentar um número de linha e uma guia ao início de cada linha de um arquivo de texto?
Respostas:
awk '{printf "%d\t%s\n", NR, $0}' < filename
awk '{print NR, "\t", $0}'
.
nl
também é ERRADA. No código fonte, ele nunca fornecerá os números de linha corretos, pois não conta linhas apenas com espaço em branco.
O comando nl deve fazer isso, mas também adiciona espaço antes do número da linha. Faz parte dos coreutils do Linux.
nl lines.txt
1 $bkWTN
2 $cV8$.
nl
para omitir o espaço antes do número. Basta usar a -w1
opção de indicar a largura mínima para um número é 1.
-nln
você, você pode justificar à esquerda se não quiser o espaço (s) antes dos números das linhas. Além disso, para especificar um separador separador de você poderia usar -s$'\t'
ou -s' '
(inserir uma tabulação entre aspas simples com ctrl+v
então tab
).
nl -w1
(do GNU coreutils 8.24) não trunca os números de linha.
sed = test.txt | sed 'N;s/\n/\t/'
O comando "sed =" imprimirá o número da linha seguido por um retorno de carro e depois a próxima linha.
A expressão "N; s / \ n / \ t /" pega cada linha, obtém a próxima linha (ou seja, número da linha e a linha) e substitui o retorno de carro por uma tabulação.
\n
é um feed de linha (normalmente chamado de "nova linha", desde que seu primeiro uso generalizado foi no Unix) e \r
é um retorno de carro. Usos do Windows \r\n
(também conhecido como CRLF
).
E se
cat -n somefile.txt
?
OK, aqui está uma solução de bash de uma linha:
$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=
A primeira configuração do IFS informa ao bash para ler uma linha completa de cada vez. A segunda linha redefine o IFS para o padrão.
Como um bônus adicional, ele roda completamente no seu shell e não executa um programa!
Ok, já que estamos coletando maneiras de fazer isso,
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//'
ou para alguns não-GNU sed
s:
cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'