como puede leer en el título, estoy tratando con dos archivos. Ella es el ejemplo de cómo se ven.
archivo1:
Nombre (información adicional separada por una pestaña del nombre)
Peter Schwarzer<tab>Best friend of minearchivo2:
Nombre (seguido de un flotante separado por una tabulación del nombre)
Peter Schwarzer<tab>1456Entonces, lo que quiero hacer es usar el archivo 1 uno como índice para buscar el archivo 2. Si los nombres coinciden, debe escribirse en el archivo 3, que debe contener el nombre seguido del flotante del archivo 2 seguido de la información adicional del archivo 1. Entonces file3 debería verse así:
Peter Schwarzer<tab>1456<tab>Best friend of mine(todo separado por tabulación)
Probé grep -f para leer un patrón de un archivo y sin la información adicional funciona. Entonces, ¿hay alguna forma de obtener el resultado deseado con grep o AWK es la respuesta?
Gracias de antemano, Julián.
prueba esta línea, no probé, pero debería ir:
awk -F'\t' -v OFS="\t" 'NR==FNR{n[$1]=$2;next}$1 in n{print $0,n[$1]}' file1 file2 > file3¡Prueba este awk one liner!
awk -v FS="\t" -v OFS="\t" 'FNR==NR{ A[$1]=$2; next}$1 in A{print $0,A[$1];}' file1.txt file2.txt > file3.txtPara mí, esto parece un trabajo para join :
join -t '\t' file1 file2 Esto supone que file1 y file2 están ordenados. Si no, ordénalos primero:
sort -o file1 file1 sort -o file2 file2 join -t '\t' file1 file2 Si no puede modificar el file1 y el archivo file2 (si necesita dejarlos en su estado original sin ordenar), use un archivo temporal:
tmpfile=/tmp/tf$$ sort file1 > $tmpfile sort file2 | join -t '\t' $tmpfile - Si join dice "especificación de carácter de tabulación ilegal", tendrá que usar join -t ' ' donde escribe una pestaña real entre comillas simples (y dependiendo de su shell, es posible que tenga que usar control-V antes de esa pestaña).