Não é necessário usar uma substituição de processo não padrão ( <(...)
) aqui:
sort file1 | join -o1.2 - file2 | uniq
Eu tenho 2 arquivos, um com 2 colunas, outro com 1 coluna. O segundo arquivo é classificado usando sort -u. Agora a tarefa é que eu preciso juntar essa coluna com a primeira coluna do primeiro arquivo, que não está ordenada, então qual será a sintaxe? Isso vai funcionar? juntar -j 1 arquivo2.txt sort -s -n -k 1 arquivo1.txt? A saída que eu quero é na verdade a segunda coluna do arquivo 2 após a junção e as entradas uniq nela.
Arquivo 2
1
2
3
Arquivo 1
2 500
1 5000
1 300
3 3000
3 300
4 450
Saída
5000
300
500
3000
join file2.txt <(sort file1.txt) | awk '{print $2}'
Uma maneira de usar sort
+ awk
. Eu classifico o outro arquivo pelo primeiro número e no modo estável. Em awk
, comparo as chaves de arquivo1 com as chaves de arquivo2 e não são repetidas, imprimindo-as:
sort -snk1,1 file1 | awk '
FNR == NR {
keys[ $1 ] = 1;
next;
}
!values[ $2 ] && keys[ $1 ] {
printf "%s\n", $2;
values[ $2 ] = 1;
}
' file2 -
Saída:
5000
300
500
3000
Tags text-processing join sort columns