Cómo agregar números de línea personalizados en un archivo

Cómo agregar números de línea personalizados en un archivo

Quiero agregar file2a file1. Antes de hacer eso, necesito agregar un número de línea personalizado al archivo file2.

file1

1 abc
2 bcd
3 efg

file2

mkh
dfd
aad
  1. Agregue el número de línea a file2lo siguiente file1.

    4 mkh
    5 dfd    
    6 aad
    
  2. anexar file2afile1

    cat file2 >> file1
    

¿Cómo puedo agregar el número de línea que file2se muestra arriba?

Respuesta1

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

nles una herramienta paranorteocre oscuroyolíneas de un archivo. El -vmodificador proporciona el valor inicial de los números de línea. Utilizo una subcapa y wcpara obtener un recuento de líneas de file1, le agrego una para obtener el número de línea inicial file2y concateno los resultados al final de file1.

Tenga en cuenta que wc -l file1imprimiría el recuento de líneas seguido del nombre del archivo, pero como hemos redirigido wcla entrada estándar de file1, la wcherramienta en sí no sabe nada sobre el nombre del archivo file1y solo imprime el recuento de líneas (con algunos espacios en blanco que no No importa en este contexto).


Esto puede hacerselevementemás limpiamente simplemente usando awky nl:

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

Respuesta2

Con awk:

awk -v nl=$(wc -l <f1.txt) '{print NR+nl " " $0}' f2.txt
  • $(wc -l <f1.txt)obtiene el número de líneas en el archivo f1.txt, lo pasamos como nlvariable aawk

  • print NR+nl " " $0imprime cada registro f2.txtcon el número de línea correspondiente agregado a la variable nl, luego un espacio y luego el registro completo

Ejemplo:

% 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

Respuesta3

Otra awksolución:

$ 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

Respuesta4

Una respuesta muy simple:

$ texto de prueba de gato
1. El veloz zorro marrón saltó sobre el perro perezoso.

$ texto de prueba de gato | tr ' ' '\n' | ordenar >testText2

$ cat -n texto de prueba texto de prueba2
     1 1. El veloz zorro marrón saltó sobre el perro perezoso.
     2 1.
     3 marrones
     4 perros.
     5 zorro
     6 saltó
     7 perezoso
     8 más
     9 rápido
    10 el
    11 El

información relacionada