Resultado:

Resultado:

Comenzando con lo básico, tengo un archivo que tiene un número, uno o más espacios y luego un nombre de archivo (incluida la ruta). El nombre del archivo y la ruta también pueden contener espacios.

Quiero usarlo awkpara separar y usar los componentes en pruebas adicionales de igualdad entre esos campos en archivos separados.

Tratando sólo del primer problema, este es el archivo:

111  aaa/aaa
222  b b/bbb
333  ccc/c c
444  d d/d d

Me gustaría ver como resultado:

aaa/aaa 111
b b/bbb 222
ccc/c c 222
d d/d d 222

La esencia aquí no es el formato de la salida anterior sino más bien poder usar $1y $2más $3en la awkexpresión después de que se hayan establecido estas variables. Aunque aquí es solo un archivo, en realidad estoy comparando dos conjuntos de archivos, pero primero necesito entender este componente.

$1debe contener la secuencia alfanumérica al inicio de la línea, $2debe contener la ruta completa (sin el nombre del archivo) y $3debe contener solo el nombre del archivo.

Intenté cambiar FSdurante el programa, pero simplemente no me sucede:

$ awk 'BEGIN{OFS=" || "}{FS=" ";a[$1]=1;FS="/";b[$NF]=1;print $1, $2, $NF}' file1
111 || dir1/a || aa
222 dir1 || bbb || bbb
333 dir1 || c cc || c cc
444 dir1 || ddd || ddd
555 dir2 || e ee || e ee
666 dir2 || fff || fff
999 dir2 || zzz || zzz

No solo se FSelimina la barra, sino que la primera variable es simplemente incorrecta porque solo se usa la segunda.FS

Respuesta1

Realmente no entiendo por qué necesita hacer esto, pero podría (por ejemplo) guardar y eliminar el espacio delimitado sin ambigüedades $1y luego dividir el resto usando el delimitador alternativo. Por ejemplo:

$ awk '
   {
      a=$1; $1=""; sub(/^ */,""); 
      n=split($0,p,"/"); 
      $1=a; for(i=1;i<=n;i++) $(i+1) = p[i]
   } {
     print $2"/"$3, $1
   }' file
aaa/aaa 111
b b/bbb 222
ccc/c c 333
d d/d d 444

Respuesta2

while read -r f1 fpath; do
   printf '%s\t%s\n' "$fpath" "$f1"
done < file1

No estoy seguro de lo que buscas, pero estás haciendo que esto sea mucho más complejo de lo necesario.

Resultado:

aaa/aaa 111
b b/bbb 222
ccc/c c 333
d d/d d 444

información relacionada