gpt4 book ai didi

linux - 使用 AWK 从 csv 文件中提取特定的单元格,并根据预定义的顺序进行排序

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

我有一组 CSV 文件。对于我需要的每个文件:

  • 提取特定细胞。
  • 根据位于其他文件中的预定义顺序对它们进行排序。
  • 将结果附加到新文件(将所有内容连接到同一个文件)。

文件示例(values1.csv):

Item, avg, max
TT, 3, 5
DD, 3, 6
ZZ, 6, 8
UU, 3, 3
JJ, 1, 5

预定义订单示例 (order.csv)。我需要所有的 avg 和一些 max:

DD_avg
ZZ_avg
ZZ_max
TT_avg
TT_max
UU_avg
JJ_avg

输出:

  file_name, DD_avg, ZZ_avg, ZZ_max, TT_avg, TT_max, UU_avg, JJ_avg
values1.csv, 3, 6, 8, 3, 5, 3, 1
values2.csv, ...................
values3.csv, ...................

AWK(或任何其他 Linux 命令)是否可以做到这一点?我的 AWK 技能非常有限,我不知道如何处理这种情况。我会很感激这里的一些帮助和指导。


编辑:真实数据

猫值1.csv

item,avg,max
System/CPU/User/percent,4.8,
System/Memory/Used/bytes,57300000000,
System/Filesystem/^data/Used/bytes,859000000,
System/Disk/disk/Reads/count/sec,37.8,730
System/Disk/disk/Writes/Utilization/percent,7.24,
System/Disk/disk/Reads/bytes/sec,849000,42100000
System/Disk/disk/Writes,0.0026,
System/Disk/disk/Writes/bytes/sec,520000,33500000
System/Disk/disk/Writes/count/sec,46.2,903
System/Disk/disk/Utilization/percent,22.4,
System/Disk/disk/Reads/Utilization/percent,15.2,

猫订单.csv

System/CPU/User/percent_avg
System/Memory/Used/bytes_avg
System/Filesystem/^data/Used/bytes_avg
System/Disk/disk/Reads/count/sec_avg
System/Disk/disk/Writes/count/sec_avg
System/Disk/disk/Reads/count/sec_max
System/Disk/disk/Writes/count/sec_max
System/Disk/disk/Reads/bytes/sec_avg
System/Disk/disk/Writes/bytes/sec_avg
System/Disk/disk/Writes/Utilization/percent_avg
System/Disk/disk/Reads/Utilization/percent_avg

最佳答案

对于 ARGIND 使用 GNU awk:

$ cat tst.awk
BEGIN { FS=", *"; OFS=", " }
NR==FNR {
colNames[++numCols] = $0
next
}
{
val[ARGIND,$1"_avg"] = $2
val[ARGIND,$1"_max"] = $3
}
END {
printf "file_name"
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", OFS, colNames[colNr]
}
print ""
for (fileNr=2; fileNr<=ARGIND; fileNr++) {
printf "%s", ARGV[fileNr]
for (colNr=1; colNr<=numCols; colNr++) {
printf "%s%s", OFS, val[fileNr,colNames[colNr]]
}
print ""
}
}

$ gawk -f tst.awk order.csv values1.csv
file_name, DD_avg, ZZ_avg, ZZ_max, TT_avg, TT_max, UU_avg, JJ_avg
values1.csv, 3, 6, 8, 3, 5, 3, 1

对于其他 awk,只需在 BEGIN 行之后添加 FNR==1{++ARGIND} 行。如果内存是一个问题,您可以使用 less 和 gawks ENDFILE 语句而不是 END 并且还有其他选项 - 如果这是一个问题,请告诉我们。

关于linux - 使用 AWK 从 csv 文件中提取特定的单元格,并根据预定义的顺序进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332489/

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