【问题标题】:Convert column data to array for further processing将列数据转换为数组以进行进一步处理
【发布时间】:2013-08-16 11:01:07
【问题描述】:

将列从 csv 文件转换为数组格式的最简单方法是什么?

我将有 3 个列,例如 la_liga、playernames_laliga 和 teamid_laliga。基本上,我想要任何接近数组格式的东西,有没有办法使用命令行来做到这一点?手动执行此操作的行太多,因此我确实需要可以直接用于进一步操作的基本数组格式。

Athletic Bilbao 336 The Parmtree
Atletico Madrid 798466  Santiagounreal
Barcelona   90402   TW
Celta Vigo  24214   Bonz
Deportivo La Coruna 142758  Boom Shakalaka
Espanyol    1658    Tangtastic
Getafe  8333    Declan McCarthy
Granada 2253    Green Windmill
Levante 14069   In Tommy We Trust
Malaga  4877    Ajay
Mallorca    77201   Emperikal
Osasuna 2714    Declan Quinn
Rayo Vallecano  171 Hillbilly Pete
Real Betis  32696   Billy Gilmore
Real Madrid 4   Demi
Real Sociedad   485 Yossi
Real Zaragoza   227 Scroobius Mac
Sevilla 8157    Chris_White
Valencia    4835    Old School
Valladolid  69246   Pepin

CSV 中的哪个

"Athletic Bilbao","336","The Parmtree"
"Atletico Madrid","798466","Santiagounreal"
"Barcelona","90402","TW"
"Celta Vigo","24214","Bonz"
"Deportivo La Coruna","142758","Boom Shakalaka"
"Espanyol","1658","Tangtastic"
"Getafe","8333","Declan McCarthy"
"Granada","2253","Green Windmill"
"Levante","14069","In Tommy We Trust"
"Malaga","4877","Ajay"
"Mallorca","77201","Emperikal"
"Osasuna","2714","Declan Quinn"
"Rayo Vallecano","171","Hillbilly Pete"
"Real Betis","32696","Billy Gilmore"
"Real Madrid","4","Demi"
"Real Sociedad","485","Yossi"
"Real Zaragoza","227","Scroobius Mac"
"Sevilla","8157","Chris_White"
"Valencia","4835","Old School"
"Valladolid","69246","Pepin"

期望的输出:

$col1=array("Athletic Bilbao","Atletico Madrid","Barcelona","Celta Vigo","Deportivo La Coruna","Espanyol","Getafe","Granada","Levante","Malaga","Mallorca","Osasuna","Rayo Vallecano","Real Betis","Real Madrid","Real Sociedad","Real Zaragoza","Sevilla","Valencia","Valladolid");
$col2=array('336','798466','90402','24214','142758','1658','8333','2253','14069','4877','77201','2714','171','32696','4','485','227','8157','4835','69246');
$col3=array("The Parmtree","Santiagounreal","TW","Bonz","Boom Shakalaka","Tangtastic","Declan McCarthy","Green Windmill","In Tommy We Trust","Ajay","Emperikal","Declan Quinn","Hillbilly Pete","Billy Gilmore", "Demi","Yossi","Scroobius Mac","Chris_White","Old School","Pepin");

必须有人为此准备好脚本,对吧?

【问题讨论】:

  • 您能否提供两个示例输入和所需输出?
  • @AdrianFrühwirth 我已经给出了一个带有中间步骤的示例输入和输出
  • 如果要输出有效的 PHP 数组语法,请使用 PHP 解析 if 并查看 var_export。但是您能否详细说明您认为需要这样做的原因?可能有更好的解决方案。
  • @cbuckley 不一定是有效的 PHP 数组语法...我可以得到基本的数组格式,应该足够了。如果我能得到这样的东西——“毕尔巴鄂竞技”、“马德里竞技”、“巴塞罗那”、“Celta Vigo”……作为输出,那就足够了。我不介意在旁边写一点。我确实需要这些数据来执行数据库操作、验证等......它适用于我们拥有的个人网站、开源游戏,并且我们很快想要获得新的注册(遗憾的是,这是通过谷歌文档完成的)。

标签: php bash shell awk


【解决方案1】:
$ awk -F, '{for (i=1;i<=NF;i++) col[i]=col[i] (NR==1?"":FS) $i} END{gsub(/"/,"\047",col[2]); for (i=1;i<=NF;i++) printf "$col%d=array(%s);\n",i,col[i]}' file
$col1=array("Athletic Bilbao","Atletico Madrid","Barcelona","Celta Vigo","Deportivo La Coruna","Espanyol","Getafe","Granada","Levante","Malaga","Mallorca","Osasuna","Rayo Vallecano","Real Betis","Real Madrid","Real Sociedad","Real Zaragoza","Sevilla","Valencia","Valladolid");
$col2=array('336','798466','90402','24214','142758','1658','8333','2253','14069','4877','77201','2714','171','32696','4','485','227','8157','4835','69246');
$col3=array("The Parmtree","Santiagounreal","TW","Bonz","Boom Shakalaka","Tangtastic","Declan McCarthy","Green Windmill","In Tommy We Trust","Ajay","Emperikal","Declan Quinn","Hillbilly Pete","Billy Gilmore","Demi","Yossi","Scroobius Mac","Chris_White","Old School","Pepin");

【讨论】:

  • 你先生太棒了:-)
  • 忽略,除​​此之外,一个简单的正则表达式查找和替换效果很好。忽略我问的。
  • 想要解释一下你做了什么……而不是我只是复制/粘贴……例如,NF、NR、FS 是什么意思?对你基本上做了什么的小解释
  • man awk 了解这些变量的定义。该脚本创建一个数组col[],由字段编号1 -> 3 索引,并且对于每一行输入,将该行上每个字段编号i 的值附加到存储在col[i] 中的字符串的末尾。读取文件的每一行后,它会打印数组。
猜你喜欢
  • 1970-01-01
  • 2017-03-03
  • 2014-11-01
  • 1970-01-01
  • 2021-08-10
  • 2021-02-17
  • 1970-01-01
  • 2018-01-26
  • 2021-04-05
相关资源
最近更新 更多