Qual è lo strumento migliore per fare l'elaborazione testo in Linux o Mac? [chiuso]

StackOverflow https://stackoverflow.com/questions/2445500

  •  20-09-2019
  •  | 
  •  

Domanda

Io in genere bisogno di fare una discreta quantità di elaborazione del testo per la mia ricerca, come ad esempio la rimozione l'ultimo token da tutte le linee, l'estrazione dei primi due token da ogni riga, dividendo ogni linea in token, ecc.

Qual è il modo migliore per eseguire questo? Dovrei imparare il Perl per questo? O dovrei imparare un qualche tipo di comandi della shell? La preoccupazione principale è la velocità. Se ho bisogno di scrivere codice lungo per cose del genere, sconfigge lo scopo.

EDIT:

ho iniziato a imparare sed sulla raccomandazione @Mimisbrunnr s' e già potuto fare quello che dovevo. Ma sembra che la gente favore awk di più. Quindi, sarà provare che. Grazie per tutte le vostre risposte.

È stato utile?

Soluzione

Perl e awk vengono in mente, anche se Python farà, se si preferisce non si impara una nuova lingua.

Perl è un linguaggio general purpose, awk di più orientato al testo di elaborazione del tipo che hai descritto.

Altri suggerimenti

Per fare editing semplice vapore sed è un grande programma di utilità che viene fornito di serie sulla maggior parte delle scatole * nix, ma per qualcosa di molto più complesso di quello che vi consiglio di prendere in Perl. La curva non è poi così male ed è grande per scrivere la maggior parte delle forme di regolare analisi del testo. Un grande riferimento può essere trovato qui .

#!/usr/bin/env python
# process.py     
import fileinput

for line in fileinput.input(): # you could use `inplace=True` parameter here
    words = line.split() # e.g. split on white spaces
    all_except_last = words[:-1]
    print ' '.join(all_except_last)
    # or
    first_two = words[:2]
    print ' '.join(first_two)

Esempi:

$ echo a b c | python process.py
$ ./process.py input.txt another.txt

* nix strumenti quali awk/grep/tail/head/sed ecc sono buoni strumenti di elaborazione dei file. Se si desidera effettuare la ricerca per i modelli in file ed elaborarli, è possibile utilizzare awk. Per i file di grandi dimensioni, è possibile utilizzare una combinazione di grep + awk. Grep per la sua velocità nel modello di ricerca e awk per la sua capacità di manipolare il testo. per quanto riguarda la sed, oftern cosa sed fa, awk può già fare loro, in modo che io trovo ridondante da utilizzare sed per l'elaborazione di file.

In termini di velocità di elaborazione dei file, awk è spesso alla pari, o, a volte meglio di Perl o altre lingue.

Inoltre, 2 ottimi strumenti per ottenere la parte anteriore e parte posteriore di un file VELOCE, sono tail e head. Quindi, per ottenere ultime righe, è possibile utilizzare tail.

Il miglior strumento dipende il compito da svolgere, naturalmente. Accanto ai consueti strumenti * nix come sed / awk etc e linguaggi di programmazione (Perl, Python), citata da altri, attualmente per l'elaborazione del testo che ho bisogno in cui il formato di dati originali non segue rigide regole di analisi, ma può variare leggermente, mi ritrovai molto bene con le macro e funzioni Vim Vimscript che io chiamo dentro l'editor Vim.

Qualcosa di simile (per il Vim non iniziati): si scrive la funzione di elaborazione (s) ad es. TxtProcessingToBeDone1 () su un file script.vim, lo legge con: script.vim fonte, quindi aprire il file (s) che si desidera modificare e:

: chiamare TxtProcessingToBeDone1 ()

su tutto il tampone in una sola volta o come un'operazione one-shot da ripetere in loco con @: e le chiavi @@. Anche più buffer / file possono essere trattati allo stesso tempo con: bufdo e:. Argdo

Con una funzione Vimscript è possibile ripetere tutte le attività si farebbe su una sessione di modifica normale (la ricerca di un modello, reg-ex, la sostituzione, spostare, cancellare, Yank, ecc, ecc), automatizzare e applicare anche un po ' flusso di controllo di programmazione (se / allora).

Considerazioni analoghe valgono per altri editor di script avanzati pure.

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