A primeira linha de cada arquivo contém nomes de campos. Pode haver duplicatas nos nomes de campos. Quero imprimir apenas os nomes de campos exclusivos. Aqui está o que tentei:
Em um arquivo Bash, files_and_folders.sh, digitei isto:
#!/bin/bash
for file in **/*.TXT ; do
awk 'NR == 1 { for (i=1; i<=NF; i++) if (!seen[$i]) seen[$i] = 1} END { for (idx in seen) printf ("%s\n",idx) }' "${file}"
done
O arquivo Bash foi executado com sucesso, mas a saída contém duplicatas:
AB_CODE
ACFT_CODE
AC_TYPE
ADD_INFO
AKA
ALT
ALT
ALT
ALT
ALT
ALT
ALT
ALT1_DESC
ALT2_DESC
ALT3_DESC
Como modificar o programa AWK (no script Bash) para eliminar duplicatas?
Provavelmente seria mais eficiente fazer:
mas se você quiser usar o awk, usando qualquer awk você pode fazer isto:
ou isto:
mas criar um
seen[]
array E percorrê-lo naEND
seção não faz sentido e nem fazif (!seen[$i]) seen[$i] = 1
- isso é testar seseen[$i]
está definido e, se não, defini-lo para que o resultado dessa instrução seja sempreseen[$i]
definido como1
.Você não deve executar um loop
bash
e executar um novoawk
processo para cada arquivo, caso contrário, a matriz associativaseen
será inicializada para cada umawk
e não reconhecerá as entradas existentes definidas por invocações anteriores deawk
.Você deve fazer isso em um único,
awk
como este: