gpt4 book ai didi

Linux命令行处理CSV

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:06 24 4
gpt4 key购买 nike

我有以下 CSV 文件:

数据.csv

Chart #,Ticker,Industry,Last Price,Multiple
2,AFL,Accident & Health Insurance,60.9,0.82
3,UNM,Accident & Health Insurance,32.97,1.52
4,CNO,Accident & Health Insurance,19.33,2.59
2,OMC,Advertising Agencies,71.71,0.7
3,IPG,Advertising Agencies,21.24,2.35
4,ADS,Advertising Agencies,278.18,0.18
2,UPS,Air Delivery & Freight Services,103.8,0.48
3,FDX,Air Delivery & Freight Services,152.11,0.33
4,EXPD,Air Delivery & Freight Services,50.725,0.99
5,CHRW,Air Delivery & Freight Services,72.3,0.69
6,FWRD,Air Delivery & Freight Services,42.86,1.17

我想使用 Awk 或最好的 linux 命令行工具使文件中的日期看起来像这样:

输出.txt

Accident & Health Insurance
2*0.82,3*1.52,4*2.59

Advertising Agencies
2*0.7,3*2.35,4*0.18

Air Delivery & Freight Services
2*0.48,3*0.33,4*0.99,5*0.69,6*1.17

我基本上是将所有“图表编号”乘以倍数,然后在一行上输出“行业”,所有图表都用逗号分隔,然后在第三行留一个空格……然后它处理整个列表。

有人可以为我指明正确的方向吗? Awk 是完成此任务的最佳工具,还是我必须创建一个 bash 脚本来处理所有这些任务?

最佳答案

$ awk -F, -v OFS='\n' -v ORS='\n\n' '
NR==1 { next }
(NR>2) && ($3!=prevKey) { print prevKey, prevRec; prevRec="" }
{ prevKey=$3; prevRec=(prevRec==""?"":prevRec",") $1"*"$NF }
END { print prevKey, prevRec }
' file
Accident & Health Insurance
2*0.82,3*1.52,4*2.59

Advertising Agencies
2*0.7,3*2.35,4*0.18

Air Delivery & Freight Services
2*0.48,3*0.33,4*0.99,5*0.69,6*1.17

以上与@A-Ray's answer的功能差异是:

  1. 我的假设文件按照示例输入中显示的 $3 排序,而 A-Rays 则不然。
  2. Mine 一次只在内存中存储与一个 $3 值关联的输出字符串,而 A-Rays 一次存储所有 $3 值的所有输出字符串。
  3. Mine 以 $3 值在输入文件中出现的顺序打印输出,而 A-Rays 以“随机”顺序打印它们(它们的索引存储在哈希表中的顺序)。
  4. 我的会在输出记录之间打印一个空行,如您预期的输出所示,而 A-Rays 不会。

关于Linux命令行处理CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33161608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com