在bash中对csv列进行排序,将bash输出读入python变量

gle*_*her 4 python bash shell

嗨,我在多个csv文件中有大量数据,并使用grep过滤掉数据集:

user@machine:~/$ 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
Run Code Online (Sandbox Code Playgroud)

我想弄清楚具有最高计数的数据集,右边的列; 然后知道相应的值(左边的;).在这种情况下,我正在寻找的集合将是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'
Run Code Online (Sandbox Code Playgroud)

我希望有一个bash唯一的解决方案(剪切,awk,数组?!?)但无法弄明白.另外,我不喜欢将bash命令写入文件然后将它们读入python变量的工作.我可以直接将它们读入变量,还是有更好的解决方案来解决这个问题?(可能是perl等...但我真的对bash解决方案很感兴趣..)

非常感谢你!!

Hak*_*yan 6

一个快速的单行将是:

grep -a "63[789]\...;" data.csv | sort -n -r -t ';' -k 2 | head --lines=1
Run Code Online (Sandbox Code Playgroud)

这只是根据第二列以数字方式对文件进行排序,然后打印出第一行.希望有所帮助.