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 № 1Con 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.