Je veux extraire une ligne si elle contient un mot dans une colonne spécifiée d’un fichier texte. Comment puis-je le faire sur une commande unix à une ligne pour le faire? Peut-être avec cat
, echo
, cut
, grep
avec plusieurs piples ou quelque chose.
J’ai un fichier texte qui a regardé avec ce format
#SentenceIDSentence1Sentence2Other_unknown_number_of_columns ...
Voici un exemple du fichier texte:
021348 this is the english sentence with coach . c'est la phrase française avec l'entraîneur . And then there are several nonsense columns like these . 923458 this is a another english sentence without the word . c'est une phrase d'une autre anglais sans le bus mot . whatever foo bar nonsense columns 2134234 $%^&
La commande devrait sortir si le mot que je cherche est coach
dans la 2ème colonne:
021348 this is the english sentence with coach . c'est la phrase française avec l'entraîneur . And then there are several nonsense columns like these .
Je peux le faire avec python en tant que tel, mais je recherche une commande unix ou quelque chose d’un seul côté:
outfile = open('out.txt') for line in open('in.txt'): if "coach" in line.split(): print>>outfile, line
Et ça?
awk -F'\t' '{if($2 ~ "coach") print} your_file
-F'\t'
-> crée le séparateur comme onglet. $2 ~ "coach"
-> cherche “coach” dans le deuxième champ. print $0
ou print
-> imprime la ligne entière. modifier
sudo_O a suggéré ce qui est encore plus court:
awk -F'\t' '$2~/coach/' file
Pour ce genre de besoin, j’utilise toujours awk:
awk -F ‘\ t’ ‘$ 2 ~ / coach / {print $ 0;}’
Vous avez access à toutes les colonnes avec $ x, $ 0 contient la ligne entière. Le test est fait avec regexp, assez simple dans ce cas, donc il est vraiment puissant si votre besoin devient plus compliqué.