Salut J'ai une tonne de données dans plusieurs fichiers csv et filtrer un ensemble de données en utilisant grep:Tri des colonnes csv en bash, lire la sortie de bash en variables python
[email protected]:~/$ cat data.csv | grep -a "63[789]\...;"
637.05;1450.2
637.32;1448.7
637.60;1447.7
637.87;1451.5
638.14;1454.2
638.41;1448.6
638.69;1445.8
638.96;1440.0
639.23;1431.9
639.50;1428.8
639.77;1427.3
Je veux comprendre l'ensemble de données qui a le compte le plus élevé, la colonne à droite du; et puis connaître la valeur correspondante (à gauche de la;). Dans ce cas, l'ensemble je suis à la recherche serait 638,14; 1454,2
J'ai essayé différentes choses et a fini en utilisant une combinaison de bash et python, qui fonctionne, mais est pas très jolie:
os.system('ls | grep csv > filelist')
files = open("filelist")
files = files.read()
files = files.split("\n")
for filename in files[0:-1]:
os.system('cat ' + filename + ' | grep -a "63[6789]\...;" > filtered.csv')
filtered = csv.reader(open('filtered.csv'), delimiter=';')
sortedlist = sorted(filtered_file, key=operator.itemgetter(1), reverse=True)
dataset = sortedlist[0][0] + ';' + sortedlist[0][1] + '\n'
J'aimerais avoir une solution de bash seulement (couper, awk, tableaux?!?) Mais je ne pouvais pas le comprendre. De plus, je n'aime pas travailler sur l'écriture des commandes bash dans des fichiers, puis les lire dans des variables python. Puis-je les lire directement dans les variables ou y a-t-il de meilleures solutions à ce problème? (probablement perl etc ... mais je suis vraiment intéressé par une solution bash ..)
Merci beaucoup !!
merci c'est un très bon script, mais le filtre pour 637, 638 et 639 ne vérifie pas l'expression rationnelle \ ...; est-ce facilement possible avec python? ce que je viens de remarquer en l'exécutant, c'est le "" autour du fichier dans les données = ligne ouverte .. merci encore j'aime vraiment cet extrait – gletscher
Si vous voulez vraiment vérifier en utilisant regex, vous pouvez utiliser le module 're'. Sinon, vous pouvez simplement vérifier si c'est un flottant. voir mon edit. – ghostdog74
+1, si vous pensez avoir besoin de frankenscripts, vous ne connaissez probablement pas assez bien les environnements (bash ou python). Je suis souvent coupable de cela. – Thomas