问答

bash – 如何按两列的比例对CSV文件的列进行排序?

 来源    2019-07-26    0  

我有一个这样的CSV文件:

bear,1,2
fish,3,4
cats,1,5
mice,3,3

我想按照第2列和第3列的比例从最高到最低排序.E.g.:

bear,1,2 # 1/2 = 0.5
fish,3,4 # 3/4 = 0.75
cats,1,5 # 1/5 = 0.2
mice,3,3 # 3/3 = 1

这将按如下方式排序:

mice,3,3
fish,3,4
bear,1,2
cats,1,5

>如何按第2列和第3列中两个数字的比例对列从最高到最低排序?

awk 'BEGIN { FS = OFS = ","} {$4 = $2/$3; print}' | sort -k4,4nr -t, | sed 's/,[^,]*$//' inputfile

或使用GNU AWK(gawk):

awk -F, '{a[$3/$2] = $3/$2; b[$3/$2] = $0} END {c = asort(a); for (i = 1; i <= c; i++) print b[a[i]]}' inputfile

上面的方法比以下方法更好,但这比使用Bash和各种实用程序的另一个答案更有效:

while IFS=, read animal dividend divisor
do
    quotient=$(echo "scale=4; $dividend/$divisor" | bc)
    echo "$animal,$dividend,$divisor,$quotient"
done < inputfile | sort -k4,4nr -t, | sed 's/,[^,]*$//'

作为单线:

while IFS=, read animal dividend divisor; do quotient=$(echo "scale=4; $dividend/$divisor" | bc); echo "$animal,$dividend,$divisor,$quotient"; done < inputfile | sort -k4,4nr -t | sed 's/,[^,]*$//'
相关文章
bash – 使用部分匹配的键列合并多个CSV文件
问答我有100个csv文件,每个文件包含2列.第一个是分类法,第二个是重要的.每个文件大约有10000行.每个文件中的分类数据仅部分共享,总共约50000个唯一值.我需要将这些合并到一个表中,其中一个文件 ...
unix – 如何删除CSV文件的列/列,其中单元格值的字符串用双引号括起来
问答如何从CSV文件中删除具有逗号分隔值的列,其中包含用双引号括起来的字符串以及介于两者之间的逗号?我有一个文件44.csv有4行包括标题,如下面的格式: column1, column2, column ...
使用JAVA从CSV文件读取列
问答嗨,我试图在JAVA中读取一个名为test.csv的CSV文件. 以下是我的代码: import java.io.BufferedReader; import java.io.FileReader; ...
python – 将几个CSV文件的列合并成一个文件
问答我有一堆CSV文件(在下面的例子中只有两个).每个CSV文件有6列.我想进入每个CSV文件,复制前两列,并将它们作为新列添加到现有的CSV文件中. 到目前为止我有: import csv f = op ...
perl – 使用公共列合并非常大的csv文件
问答例如,我有两个csv文件, 0.csv 100a,a,b,c,c 200a,b,c,c,c 300a,c,d,c,c 和 1.csv 100a,Emma,Thomas 200a,Alex,Jason ...
java – csv文件中列的最大长度是多少?
问答csv文件中列的最大长度是多少.它可以被java代码控制吗?::您可以拥有一个与最大文件大小一样长的列.这通常受硬盘大小的限制. 在Java中,实际限制大约是20亿个字符,这是字符串的最大大小. 如果 ...
postgresql – 将一些csv文件的列复制到表中
问答我有一个包含10列的CSV文件.在创建具有4列的PostgreSQL表之后,我想将10列中的一些复制到表中. 我的CSV表格的列如下所示: x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 ...
Pythonic从CSV文件复制列的方法
问答我正在寻找一种pythonic和简洁的方法来选择.csv文件中的列并将列的所有单元格存储在例如列表中. import csv with open("/path/to/file.csv&quo ...
如何解析可能有两个分隔符之一的CSV文件?
问答在我的例子中,有效的CSV是用逗号或分号分隔的.我对其他库开放,但它需要是Java.通过Apache CSVParser API阅读,我唯一能想到的就是这样做看起来既低效又难看. try { Buff ...
python – 提取.csv文件的列并查找其索引
问答我有一个大的csv,文件,我想得到它的所有值,存储在我知道名称的特定列中. 不知怎的,我不明白该怎么做,但我想我很接近:( import codecs import csv import json i ...
Python通过CSV文件及其列循环
问答所以我看到这样做是在这里提出的其他问题,但我仍然有点困惑.我在过去的几天里一直在学习python3,并且认为我已经开始研究一个真正让我的手弄脏的项目了.我需要遍历一定数量的CSV文件并对这些文件进行编 ...
在python中,如何将CSV文件的列写入字典?
问答我试图获取给定的csv文件并将第一列定义为键,而每个键引用一个包含2个值的数组,其中一个值在第二列中,另一个值在第三列中.最后,不能将列切换成行,反之亦然,看看我在每个csv中有多少行,我必须使用它. ...
使用bash shell脚本按数字顺序逐个附加csv文件
问答给定名为1.csv,2.csv,3.csv,- 89.csv - n.csv的文件 如何在bash shell脚本中以数字顺序(1到n)将它们一起追加? 这个解决方案有一个单线程吗?::如果您的文件以 ...
linux – 从文件中读取列,然后将列读入现有的csv文件
问答基本上,我有一个包含多个列的csv文件,名为cols.csv 1,a,100 2,b,200 3,c,300 4,e,400 我有一个新的csv文件,有一列,名为col.csv f g h i 我想复 ...
shell-script – 用另一个文件中的列替换csv文件的列
问答我有两个这样的示例文件: $cat file1 abc,sachin cat,kumar $cat file2 xyz pressure $cat file3 xyz,sachin pressure, ...
更改多个csv文件的列
问答我有一个名为scenario1.csv的csv文件,其中第二列的列名称为"0 – 4年高风险","65年第一响应者"等.有20个这样的值.第21行,第2列与第2 ...
python – 按列合并多个csv文件的最快方法是什么?
问答我有大约50个CSV文件,每个文件有60,000行,并且列数不同.我想按列合并所有CSV文件.我已经尝试在MATLAB中通过转置每个csv文件并重新保存到磁盘,然后使用命令行来连接它们.这使我的计算机 ...
awk – linux csv文件将列连接成一列
问答我一直在寻找sed,awk或cut这样做.我愿意使用任何其他命令行程序,我可以通过管道传输数据. 我有一大堆以逗号分隔的数据.行有14到20列.我需要递归地连接第10列和每行第11列,这样每行只有14 ...
php – 将7列修剪为5(csv文件)的脚本
问答如何通过运行一些类型的脚本,将这7列减少到5列. 我记得你可以使用正则表达式/ php做到这一点,但如果我能回忆起我们是如何做到这一点的话. 示例代码(GEO IP db(115,000行)) &qu ...