【发布时间】:2015-01-24 19:39:05
【问题描述】:
我有一个包含数千行的 CSV 文件,我需要获取该文件中的一些列来创建另一个用于导入数据库的 CSV 文件。
我不再熟悉 shell 脚本了,有没有人可以帮助我指出正确的方向?
我有一个 bash 脚本来读取源文件,但是当我尝试将我想要的列打印到一个新文件时它不起作用。
while IFS=, read symbol tr_ven tr_date sec_type sec_name name
do
echo "$name,$name,$symbol" >> output.csv
done < test.csv
上面是我的代码。在原始文件的 6 列中,我想用“column6,column6,column1”构建一个 CSV
测试的CSV文件是这样的:
Symbol,Trading Venue,Trading Date,Security Type,Security Name,Company Name
AAAIF,Grey Market,22/01/2015,Fund,,Alternative Investment Trust
AAALF,Grey Market,22/01/2015,Ordinary Shares,,Aareal Bank AG
AAARF,Grey Market,22/01/2015,Ordinary Shares,,Aluar Aluminio Argentino S.A.I.C.
我的脚本做错了什么?或者,有没有更简单、更快捷的方法?
编辑
这些是真正的标题:
Symbol,US Trading Venue,Trading Date,OTC Tier,Caveat Emptor,Security Type,Security Class,Security Name,REG_SHO,Rule_3210,Country of Domicile,Company Name
我正在尝试获取最后一列,即第 12 列,但它始终为空。
【问题讨论】:
-
sn-p 对我来说看起来不错。我什至对其进行了测试并按预期工作。不过,您可以考虑使用这个 awk,更直接一点:
awk 'BEGIN{FS=OFS=","} {print $6,$6,$1}' test.csv > output.csv -
你知道吗,我也用 AWK 找到了一个解决方案并尝试了它,但没有奏效......但我刚刚尝试了你的解决方案,它成功了!我发现的另一个 AWK 解决方案是这样的(仅使用不同的列):
awk -F, '{getline f1 <"test.csv" ;print f1,$3,$4}' OFS=, output.csv -
愿意写下您的解决方案作为接受它的答案吗?
-
当然!这个
getline用法是完全没有必要的,所以扔掉那个sn-p :)