Começando com o básico, eu tenho um arquivo que tem um número, um ou mais espaços, então um nome de arquivo (incluindo o caminho). O nome do arquivo e o caminho podem conter espaços também.
Eu quero usar awk
para separar e usar os componentes em testes adicionais sobre a igualdade entre esses campos em arquivos separados.
Lidando apenas com o primeiro problema, este é o arquivo:
111 aaa/aaa
222 b b/bbb
333 ccc/c c
444 d d/d d
Eu gostaria de ver como a saída:
aaa/aaa 111
b b/bbb 222
ccc/c c 222
d d/d d 222
A essência aqui não é o formato da saída acima, mas sim a possibilidade de usar $1
, $2
e $3
na expressão awk
após essas variáveis terem sido definidas. Embora aqui seja apenas um arquivo, eu estou realmente comparando dois conjuntos de arquivos, mas preciso me concentrar primeiro nesse componente.
$1
deve conter a sequência alfanumérica no início da linha,
$2
deve conter o caminho inteiro (sem o nome do arquivo) e
$3
deve conter apenas o nome do arquivo
Eu tentei alterar o FS
durante o programa, mas isso não está acontecendo comigo:
$ 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
Não apenas o FS
está removendo a barra, como a primeira variável está errada porque está usando apenas o segundo FS