Como adicionar números de linha personalizados em um arquivo

Como adicionar números de linha personalizados em um arquivo

Eu quero anexar file2a file1. Antes de fazer isso, preciso adicionar um número de linha personalizado ao arquivo file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. Adicione o número da linha a file2seguir file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. Anexar file2afile1

    cat file2 >> file1
    

Como posso adicionar o número da linha file2mostrado acima?

Responder1

nl -v "$((1+$(wc -l < file1)))" file2 >> file1

nlé uma ferramenta paranâmbareuarquivos. A -vopção fornece o valor inicial dos números de linha. Eu uso um subshell and wcpara obter uma contagem de linhas file1e adiciono um a ele para obter o número da linha inicial file2e concateno os resultados no final de file1.

Observe que isso wc -l file1imprimiria a contagem de linhas seguida pelo nome do arquivo, mas como redirecionamos wco stdin para vir from file1, a wcferramenta em si não sabe nada sobre o nome do arquivo file1e apenas imprime apenas a contagem de linhas (com alguns espaços em branco que não não importa neste contexto).


Isto pode ser feitoum poucode forma mais limpa apenas usando awke nl:

nl -v $(awk 'END { print NR + 1 }' file1) file2 >> file1

Responder2

Com awk:

awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
  • $(wc -l <f1.txt)obtém o número de linhas no arquivo f1.txt, estamos passando isso como nlvariável paraawk

  • print NR+nl " " $0imprime cada registro f2.txtcom o número de linha correspondente adicionado à variável nl, depois um espaço e, em seguida, o registro inteiro

Exemplo:

% cat f1.txt 
1 abc
2 bcd
3 efg

% cat f2.txt 
mkh
dfd
aad

% awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
4 mkh
5 dfd
6 aad

Responder3

Outra awksolução:

$ awk 'NF==1{print ++c" "$1 >> "file1"} NF>1{c=$1}' file1 file2
$ cat file1
1 abc
2 bcd
3 efg
4 mkh
5 dfd
6 aad


Caso genérico:

$ cat file1
1 abc x
2 bcd y
3 efg z
$ cat file2
mkh 1a
dfd foo
aad bar

$ awk 'NR==FNR{c=$1; next} {print ++c" "$0 >> "file1"}' file1 file2
$ cat file1
1 abc x
2 bcd y
3 efg z
4 mkh 1a
5 dfd foo
6 aad bar

Responder4

Uma resposta muito simples:

$ cat testText
1. A rápida raposa marrom saltou sobre o cachorro preguiçoso.

$ cat testText | tr ' ' '\n' | classificar >testText2

$ cat -n testText testText2
     1 1. A rápida raposa marrom saltou sobre o cachorro preguiçoso.
     2 1.
     3 marrons
     4 cachorro.
     5 raposa
     6 saltou
     7 preguiçoso
     8 acima
     9 rápido
    10 o
    11 O

informação relacionada