您好我有多個CSV文件一噸的數據,並用grep過濾掉數據集:排序在bash CSV列,讀的bash輸出到蟒蛇變量
[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
我想弄清楚的數據集其中計數最高的是列右邊的;然後知道相應的值(左邊的)。在這種情況下,我在尋找一套是638.14; 1454.2
我嘗試不同的事情,結束了使用bash和Python,它的工作原理的組合,但不是很漂亮:
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'
我很想有一個bash唯一的解決方案(cut,awk,arrays?!?),但無法弄清楚。另外,我不喜歡將bash命令寫入文件然後將它們讀入python變量的工作。我可以直接將它們讀入變量,還是有更好的解決方案來解決這個問題? (可能是perl等......但我真的對bash解決方案感興趣..)
非常感謝!
感謝這是一個非常好的腳本,但637,638和639的過濾器不檢查正則表達式\ ...;用python很容易嗎?我剛纔注意到的是在data = open line中的「」周圍的文件..再次感謝我真的很喜歡這個片段 – gletscher 2010-10-16 00:30:19
如果你真的想使用正則表達式檢查,你可以使用're'模塊。否則,你可以簡單地檢查它是否是一個浮點數。看我的編輯。 – ghostdog74 2010-10-16 00:54:19
+1,如果你認爲你需要frankenscripts,你可能不知道任何環境(bash或python)。我經常犯這個。 – Thomas 2010-10-16 14:42:33