Eu tenho dois arquivos dos quais eu quero criar um terceiro que contém todas as informações.
arquivo 1:
a 111
b 222
c 333
d 666
e 777
arquivo 2:
111 x1
222 x2
333 x3
444 x4
555 x5
666 x6
777 x7
888 x8
Gostaria de combiná-los da seguinte forma:
111 x1 a
222 x2 b
333 x3 c
444 x4 0
555 x5 0
666 x6 d
777 x7 e
888 x8 0
Nota:
A segunda coluna do arquivo 1 é um subconjunto da primeira coluna do arquivo 2
command-line
text-processing
gforce89
fonte
fonte
-e0
não precisa de perl :)Usando junção:
O comando join une as linhas de dois arquivos que compartilham um campo de dados comum. Nesse caso: Una o arquivo2 e o arquivo1 usando o campo 1 (
-1 1
) do arquivo2 e o campo 2 (-2 2
) do arquivo1.A saída será: "campo unido, campo 2 do arquivo2, campo 1 do arquivo1" (
-o'0,1.2,2.1'
), se houver um campo ausente, coloque 0 (-e0
)Se um dos dois arquivos tiver mais registros, adicione-os (nesse caso, arquivo2) (
-a1
)Por favor, consulte a página de manual do comando join
fonte
Um pouco de
awk
mágica:ou
Resultado
Explicação
FNR==NR{a[$2]=$1;next}
Executa over
file1
(FNR==NR
) e cria uma estrutura de valor-chave. A chave é a segunda coluna ($2
) defile1
, o valor é a primeira coluna ($1
) defile1
{if(a[$1]==""){a[$1]=0};print $1,$2,a[$1]}
Corre
file2
eif(a[$1]==""){a[$1]=0}
Se a chave na primeira coluna (
$1
) infile2
não existirfile1
, precisamos de um0
print $1,$2,a[$1]
Imprima (usando
print
) a primeira e a segunda colunafile2
e o valor da estrutura de valores-chave com a chave da primeira coluna ($1
) defile2
ou
printf "%s%s%s%s%s\n",$1,FS,$2,FS,a[$1]}'
Imprima (usando
printf
) a primeira e a segunda coluna defile2
e o valor da estrutura de valores-chave com a chave da primeira coluna ($1
) defile2
.FS
é o separador entre as colunas, retirado do arquivo de entrada"%s%s%s%s%s\n"
é a formatação para a saída
%s
- Corda\n
- Nova linhafonte
Usando q :
Às vezes, pode ser mais legível dessa maneira.
fonte
q
está no pacotepython3-q-text-as-data
(Python 3) e no pacotepython-q-text-as-data
(Python 2).q
pacote? Eu não parecem ser capazes de instalar qualquerpython-q-text-as-data
oupython3-q-text-as-data
. "E: Não foi possível localizar o pacote python3-q-text-as-data". Meu sistema já instaladopython
,python2.7
,python3
, epython3.4
.