【发布时间】:2019-09-04 15:49:21
【问题描述】:
我有两个文件:
在第一个 (champions.csv) 我有一些英雄联盟冠军的号码和名字
1,Annie
2,Olaf
3,Galio
4,Twisted Fate
5,Xin Zhao
6,Urgot
7,LeBlanc
8,Vladimir
9,Fiddlesticks
10,Kayle
11,Master Yi
在第二个(top.csv)中,我有几个冠军(第一列和第二列)以及他们赢得比赛的次数(第三列)
2,1,3
3,1,5
4,1,6
5,1,1
6,1,10
7,1,9
8,1,11
10,4,12
7,5,2
3,3,6
我需要用第一个文件的相应名称替换第二个文件的编号。
我尝试使用 awk 并将名称存储在一个数组中,但没有成功
lengthChampions=`cat champions.csv | wc -l`
for i in `seq 1 $length`; do
name=`cat champions.csv | head -$i | tail -1 | awk -F',' '{print $2}'`
champions[$i]=$name
done
for i in `seq 1 10`; do
champion1=${champions[`cat top.csv | head -$i | tail -1 | awk -F',' '{print $1}'`]}
champion2=${champions[`cat top.csv | head -$i | tail -1 | awk -F',' '{print $2}'`]}
awk -F',' 'NR=='$i' {$1='$champion1'} {$2='$champion2'} {print $1","$2","$3}' top.csv > tmptop.csv && mv tmptop.csv top.csv
done
我想要一个解决这个问题的方法,可能代码比这个少。结果应该是这样的(不是我的文件的实际结果):
Ahri,Ashe,1502
Camille,Ezreal,892
Ekko,Dr. Mundo,777
Fizz,Caitlyn,650
Gnar,Ezreal,578
Fiora,Irelia,452
Janna,Graves,321
Jax,Jinx,245
Ashe,Corki,151
Katarina,Lee Sin,102
【问题讨论】:
-
完全不清楚,
Ashe的输出来自哪里?请编辑与预期输出相关的示例,然后告诉我们。 -
您输出中的
1502之类的数字是从哪里来的?为什么输入文件第二列的数字1在输出文件每一行的第二列变成不同的字符串? -
抱歉结果中的数字和名称错误。 Champion.csv 更大,第二个文件的数量也更大。结果只是一个例子。
-
@GuillermoMartínez,您无需发布完整文件,只需提供输入和预期输出示例,我们可以通过这些示例了解获取输出的逻辑。
-
@GuillermoMartínez @GuillermoMartínez minimal reproducible example 您提供的用于证明您的需求需要显示您希望从您显示的输入中产生的输出。显示来自其他一组输入的输出几乎没有那么有用!如果不清楚,请参阅How to Ask。哦,如果我是你,如果 top.csv 中的数字在 Champions.csv 中不存在,我会包含你想要输出的内容。