GNU/Linux >> Linux Esercitazione >  >> Linux

grep output da lungo a largo

Utilizzo di GNU datamash :

$ grep -n -x -F -f fileA.txt fileB.txt | datamash -s -t : -g 2 collapse 1
Germany:4,9
UK:5,6
USA:1,2,11

Questo prima utilizza grep per ottenere le linee da fileB.txt che corrisponde esattamente alle righe in fileA.txt , e restituisce i numeri di riga corrispondenti insieme alle righe stesse.

Sto usando -x e -F oltre alle opzioni utilizzate nella domanda. Lo faccio per evitare di leggere i modelli da fileA.txt come espressioni regolari (-F ) e per abbinare righe complete, non sottostringhe (-x ).

Il datamash l'utilità lo analizza quindi come righe di : -campi delimitati (-t : ), ordinandolo (-s ) nel secondo campo (-g 2; i paesi) e comprimendo il primo campo (collapse 1; i numeri di riga) in un elenco per ciascun paese.

Ovviamente potresti quindi sostituire i due punti e le virgole con le tabulazioni usando tr ':,' '\t\t' , o con spazi in modo simile.

$ grep -n -x -f fileA.txt -F fileB.txt | datamash -s -t : -g 2 collapse 1 | tr ':,' '\t\t'
Germany 4       9
UK      5       6
USA     1       2       11

Usa awk :

awk 'NR==FNR        { country[$0]= country[$0]? country[$0] FS NR: NR; next }
     ($0 in country){ print $0, country[$0] }' fileB fileA

o per segnalare "count:0 " nel caso ci fosse un countryName nel fileA che non appare nel fileB, fai:

awk 'NR==FNR        { country[$0]= country[$0]? country[$0] FS NR: NR; next }
     ($0 in country){ print $0, country[$0]; next } { print $0, "0" }' fileB fileA

Potresti accoppiare l'output del tuo comando grep con Miller (https://github.com/johnkerl/miller) ed eseguire

grep -nf fileA.txt fileB.txt | \
mlr --c2n --ifs ":" --implicit-csv-header --headerless-csv-output reorder -f 2  then \
nest --implode --values --across-records --nested-fs " " -f 1

Avrai

Germany 4 9
USA 1 2 11
UK 5 6

Linux
  1. Come evidenziare una parola nell'output di "cat"??

  2. Limitare l'uscita di ricerca ed evitare il segnale 13?

  3. Come sopprimere l'output da Grep, in modo che restituisca solo lo stato di uscita?

  4. Linux:la colonna dei buffer nell'output di Free?

  5. Come avviare Grep multi-thread nel terminale?

8 Comando Tee Linux con esempi

Come reindirizzare l'output del comando della shell

Colora l'output dei sensori?

Come reindirizzare l'output da grep a cp?

Come posso filtrare i risultati univoci dall'output di grep?

Come eseguire il grep dell'output di ps con le intestazioni