【发布时间】:2020-04-27 00:44:03
【问题描述】:
假设我有文件
- 报告-x-1.csv
- report-x-2.csv
- report-x-3.csv
- report-y-1.csv
- report-y-2.csv
- report-y-3.csv
我得到了第二列的最后一个值,有点格式
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print "x:";print want} ' report-x-1.csv >> test.txt
如何处理任意数量的 .csv 文件并在顶部设置计数器?
awk -v max=0 '{if($1>max){want=$2; max=$1}}END{print "x:";print want} ' report-x-* >> test.txt
只为第一个文件做一些事情。
我最终需要的是一个像这样的 .csv,但输入文件的数量是任意的:
x1 , 300
x2 , 250
x3 , 300
y1 , 270
y2 , 250
y3 , 280
编辑:
我还没有详细尝试每个想法,为了更清楚,这里有两个示例文件
这些文件可以命名为 report-x-1.csv 和 report-y-1.csv,输出文件应包含两行 x-1: 156. ... 和 y-1: 300. .. ..(这是最后一行第二列)
该解决方案应该适用于上述多个输入文件。
【问题讨论】:
-
if($1>max){want=$2; max=$1}看起来你想要最大值,而不是最后一个值。 -
@blackbaddl :awk 的默认字段分隔符是空格,所以 - 如果我拿你的示例文件 -
echo 'x1 , 300' | awk '{print $2}'将输出一个逗号,而不是第二个 CSV 列中的数字。跨度> -
@KamilCuk 是的,你是对的,但无论如何第一列是一个上升计数器