[Risolto][BASH] Estrarre righa tramite numero(posizione) da file csv

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Avatar utente
Metallkros
Prode Principiante
Messaggi: 21
Iscrizione: venerdì 10 luglio 2020, 10:52
Desktop: ubuntu
Distribuzione: Ubuntu 18.04.4 LTS

[Risolto][BASH] Estrarre righa tramite numero(posizione) da file csv

Messaggio da Metallkros »

Ciao a tutti,

ho un file csv, con quasi 3000 righe e 11 colonne, all'interno di questo mi servono solo alcune informazioni, avevo pensato ad un modo per estrapolarle che è il seguente :

con il comando :

Codice: Seleziona tutto

cat file.csv |cut -d"," -f11|grep -nI WIFI >> risultato.txt
ricerco le righe che mi servono, e genero un file con all'interno il numero(posizione) della riga.

Ora mi servirebbe un modo per cercare all'interno di un file csv partendo dalla posizione della riga, per stamparla interamente(comprese tutte le altre colonne) in un secondo file.

All'inizio non avevo questo problema perchè selezionavo tutte le colonne in questo modo :

Codice: Seleziona tutto

cat file.csv |cut -d"," -f1-11|grep -nI WIFI >> risultato.txt
ma mi sono accorto che si lascia dietro delle righe che in realtà hanno sull'ultima colonna la dicitura WIFI, e che quindi mi serve estrapolare.

Per ora quindi mi servirebbe un comando a cui dico "manda in output il contenuto della riga numero 5", è possibile fare ciò con grep ?



Grazie a tutti
Ultima modifica di Metallkros il venerdì 14 aprile 2023, 11:55, modificato 1 volta in totale.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [BASH] Estrarre righa tramite numero(posizione) da file csv

Messaggio da rai »

Per ora quindi mi servirebbe un comando a cui dico "manda in output il contenuto della riga numero 5", è possibile fare ciò con grep ?

Codice: Seleziona tutto

riga=5; grep -n , file.csv| grep "^$riga:"
Se non serve il numero di riga si potrebbe fare così:

Codice: Seleziona tutto

riga=5; grep -n , file.csv| grep -Po "(?<=^$riga:).*"
Comunque, se grep non è indispensabile ci sono modi più efficienti perchè evitano di aprire altri processi in pipe:

Per es. usando awk, con numero di riga

Codice: Seleziona tutto

riga=5; awk -v riga=$riga 'NR==riga {print riga": " $0 }' file.csv
senza

Codice: Seleziona tutto

riga=5; awk -v riga=$riga 'NR==riga' file.csv
Avatar utente
Metallkros
Prode Principiante
Messaggi: 21
Iscrizione: venerdì 10 luglio 2020, 10:52
Desktop: ubuntu
Distribuzione: Ubuntu 18.04.4 LTS

Re: [BASH] Estrarre righa tramite numero(posizione) da file csv

Messaggio da Metallkros »

Ciao @rai ,

grazie per la risposta, si il grep non è indispensabile, ho provato con awk come hai suggerito e va alla grande, mi sa che devo studiarlo meglio awk :D.
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2848
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: [Risolto][BASH] Estrarre righa tramite numero(posizione) da file csv

Messaggio da rai »

Sì awk è molto più duttile di grep e permette di risolvere problemi complicati. Comunque in un caso come questo grep funziona bene e ha una documentazione che è molto più digeribile di quella di awk. Per esempio non si capisce cosa volevi fare con l'opzione -I (probabilmente intendevi usare -i per fare corrispondere sia WIFI che wifi ?)
Metallkros ha scritto: [. . .]

Codice: Seleziona tutto

cat file.csv |cut -d"," -f11|grep -nI WIFI >> risultato.txt
[. . .]

Codice: Seleziona tutto

cat file.csv |cut -d"," -f1-11|grep -nI WIFI >> risultato.txt
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 6 ospiti