您好我有多个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