我有一个包含数千行的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,collumn1”构建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,但它总是空白。
该代码段对我来说看起来不错,并且工作正常,也许您的文件中包含一些奇怪的字符,或者它来自DOS环境(用于dos2unix
“清理”它!)。同样,您可以利用read -r
来防止带有反斜杠的奇怪行为。
但是让我们看看如何awk
更快地解决这个问题:
awk 'BEGIN{FS=OFS=","} {print $6,$6,$1}' test.csv >> output.csv
BEGIN{FS=OFS=","}
这会将输入和输出字段分隔符设置为逗号。或者,你可以说-F=","
,-F,
或者把它作为一个变量-v FS=","
。同样适用于OFS
。{print $6,$6,$1}
打印第六个字段两次,然后打印第一个字段。请注意,使用时print
,您输入的每个逗号分隔的参数都将使用OFS
先前设置的进行打印。在这里,以逗号分隔。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句