/ / Trova le somiglianze tra due file: bash, awk

Trova le somiglianze tra due file: bash, awk

Ho due file come:

1
2
3
4
5
6
7
8
9
10

e un file con due colonne

1 0.11
2 0.12748
5 0.45
12 0.48
7 0.48
8 0.7
13 0.78
14 0.88

Vorrei trovare le similitudini tra ildue file. Se in entrambi i file il numero nel file 1 viene visualizzato anche nella prima colonna del file 2, significa che deve apparire nel file di output. L'output dovrebbe essere:

1 0.11
2 0.12748
5 0.45
7 0.48
8 0.7

Ho provato con una diversa combinazione di grep ma non funziona.

risposte:

4 per risposta № 1

Con awk:

awk "NR==FNR{a[$1]++;next}$1 in a" test.1 test.2

Nota in un array le linee che appaiono nel primo file, quindi stampa le linee nel secondo che erano nel primo. Le linee appariranno nell'output nell'ordine in cui appaiono nel secondo file.

Oppure unisciti:

join <(sort test.1) <(sort test.2)

I file devono essere ordinati. Le linee appariranno nell'ordine del dizionario.


5 per risposta № 2

Puoi usare grep -f patt_file file per ottenere gli schemi da un file. Cioè, cerca in file modelli inclusi in patt_file.

Vedi l'output con il tuo input dato:

$ grep -w -f file1 file2
1 0.11
2 0.12748
5 0.45
7 0.48
8 0.7

A partire dal man grep:

-f FILE, --file = FILE

Ottieni schemi da FILE, uno per riga. Se questa opzione viene utilizzata più volte o è combinata con l'opzione -e (--regexp), cercare tutti i motivi forniti. Il file vuoto contiene zero schemi e pertanto non corrisponde a nulla.