Você pode fazer algo assim com awk
:
awk 'FNR==NR{
a[$1];next
}
(FNR%10==3 && $1 in a){
nr=FNR+9
}
(FNR<=nr || nr==""){
print
}' file1 file2
Aqui, presumi que há uma linha em branco depois de cada linha.
Eu tenho dois arquivos, o primeiro arquivo contém apenas 1 campo, o segundo arquivo tem mais linhas do que o primeiro arquivo e também possui um campo diferente em cada linha.
Arquivo 1:
5
15
20
Arquivo 2:
3
5
O 1.25 2.30 3.75
H 1.55 2.45 3.80
H 1.65 2.50 3.90
3
10
O 1.49 2.90 3.52
H 1.89 2.08 3.05
H 1.90 2.18 3.28
3
15
O 1.09 2.29 3.10
H 1.30 2.49 3.69
H 1.54 2.05 3.01
3
20
O 1.91 2.31 3.98
H 1.64 2.96 3.04
H 1.07 2.49 3.49
no arquivo 2, há loop periódico, que a primeira linha é o número 3 e, em seguida, a segunda linha mostra o número como 5,10,15,20, ... e as 3 linhas que contêm 4 campos.
Eu quero comparar dois arquivos e salvar os dados quando eles tiverem o mesmo número, por exemplo, no arquivo 1, o primeiro campo é 5, eu preciso imprimir os dados do arquivo 2 somente!
corresponde ao arquivo 1 como entrada e arquivo 2 que eu preciso extrair dados, gostaria de ter a saída assim:
3
5
O 1.25 2.30 3.75
H 1.55 2.45 3.80
H 1.65 2.50 3.90
3
15
O 1.09 2.29 3.10
H 1.30 2.49 3.69
H 1.54 2.05 3.01
3
20
O 1.91 2.31 3.98
H 1.64 2.96 3.04
H 1.07 2.49 3.49
Como posso ter a saída assim? quando FNR == NR, imprime o campo anterior e também FNR == NR e depois os próximos três campos. porque eles estão se relacionando e eu gostaria de tê-los. Muito obrigado Leila
Você pode fazer algo assim com awk
:
awk 'FNR==NR{
a[$1];next
}
(FNR%10==3 && $1 in a){
nr=FNR+9
}
(FNR<=nr || nr==""){
print
}' file1 file2
Aqui, presumi que há uma linha em branco depois de cada linha.
Tags text-processing awk