Domanda

Devo avere a che fare con i file di testo in un vasto assortimento di formati.Ecco un esempio (Colonne Un e B sono delimitati da tabulazioni):

A   B
a   Name1=Val1, Name2=Val2, Name3=Val3
b   Name1=Val4, Name3=Val5
c   Name1=Val6, Name2=Val7, Name3=Val8

Il file potrebbe avere intestazioni o non, si sono mescolati per la delimitazione di schemi, avere le colonne di coppie nome/valore come sopra etc.
Ho spesso l'ad-hoc bisogno di estrarre i dati da questi file in vari modi.Per esempio, dai dati di cui sopra si desidera conoscere il valore associato con Nome2, dove è presente.cioè

A   B
a   Val2
c   Val7

Quali strumenti/tecniche esistono per l'esecuzione di tali manipolazioni come una riga comandi, utilizzando il sopra come esempio, ma estendibile anche ad altri casi?

È stato utile?

Soluzione

Non mi piace sed troppo, ma funziona per queste cose:

var="Name2";sed -n "1p;s/\([^ ]*\) .*$var=\([^ ,]*\).*/\1 \2/p" < filename

Ti offre:

 A B
 a Val2
 c Val7

Altri suggerimenti

Hai tutti i comandi bash, per esempio grep, cut, sed e awk a tua disposizione.È inoltre possibile utilizzare Perl o Ruby per cose più complesse.

Da quello che ho visto mi piacerebbe iniziare con Awk per questo genere di cose, quindi se avete bisogno di qualcosa di più complesso, mi piacerebbe corso di Python.

Vorrei usare sed:

   # print section of file between two regular expressions (inclusive)
   sed -n '/Iowa/,/Montana/p'             # case sensitive

Dal momento che si dispone di cygwin, mi piacerebbe andare con Perl.È il più facile da imparare (check out O'Reily libro: Learning Perl) e ampiamente applicabile.

Vorrei usare il Perl.Scrivi un modulo di piccole dimensioni (o più di uno) per affrontare i diversi formati.Si potrebbe quindi correre perl oneliners che utilizzano questa libreria.Esempio per quello che sarebbe sembrano, come segue:

perl -e 'use Parser;' -e 'parser("in.input").get("Name2");'

Non ci metterei la mano sul sintassi, ma l'idea generale.Abstract il compito a portata di mano per consentire di pensare in termini di ciò che è necessario fare, e non hai bisogno di farlo.Ruby sarebbe un'altra opzione, tende ad avere un pulitore di sintassi, ma in ogni lingua di lavoro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top