GNU/Linux >> Tutoriales Linux >  >> Linux

Agregar una columna de valores en un archivo delimitado por tabulaciones

Puede usar un bucle de una sola línea como este:

for f in file1 file2 file3; do sed -i "s/$/\t$f/" $f; done

Para cada archivo en la lista, esto usará sed para agregar al final de cada línea una pestaña y el nombre del archivo.

Explicación:

  • Uso del -i marcar con sed para realizar un reemplazo en el lugar, sobrescribiendo el archivo
  • Realizar una sustitución con s/PATTERN/REPLACEMENT/ . En este ejemplo, el PATRÓN es $ , el final de la línea y REEMPLAZO es \t (=una TAB), y $f es el nombre del archivo, de la variable de bucle. El s/// El comando está entre comillas dobles para que el shell pueda expandir las variables.

Vamos, ¿por qué recomiendan esas poderosas herramientas cuando hay paste? ¡comando!

$ cat a
A
B
C
D
$ cat b
1
2
3
4
$ paste a b
A   1
B   2
C   3
D   4

Con un pequeño truco, podrías usar paste para el propósito del OP. Sin embargo, no reemplazará los archivos en su lugar:

for f in file1 file2 file3; do 
    paste $f <(yes $f | head -n $(cat $f | wc -l)) > $f.new
done

Esto pegará el nombre de archivo respectivo como la última columna de cada archivo en el nuevo archivo filename.new


Puedes usar awk :

awk '{print $0, FILENAME}' file1 file2 file3 ...

Linux
  1. Mostrar la salida del comando o el contenido del archivo en formato de columna

  2. ¿Reemplazar las variables de entorno en un archivo con sus valores reales?

  3. Lum:¿reemplazar valores comunes en dos archivos según la primera columna?

  4. Ordenar un archivo delimitado por tabulaciones

  5. Agregar sección al archivo ELF

Agregar un encabezado a un archivo delimitado por tabulaciones

Tomar la enésima columna en un archivo de texto

Obtener valores del archivo plist en Linux

Usar awk para sumar los valores de una columna, en función de los valores de otra columna

Agregar archivo a archivos tbz

finalización del archivo bash sin especificar ./