使用 shell 脚本从另一个 CSV 中的特定列创建 CSV
Create CSV from specific columns in another CSV using shell scripting
我有一个包含几千行的 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.
我的脚本哪里做错了?或者,是否有更简单、更快的方法来做到这一点?
编辑
这些才是真实的headers:
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
到 "clean"!)。此外,您可以使用 read -r
来防止反斜杠出现奇怪的行为。
但是让我们看看 awk
如何更快地解决这个问题:
awk 'BEGIN{FS=OFS=","} {print ,,}' test.csv >> output.csv
说明
BEGIN{FS=OFS=","}
这会将输入和输出字段分隔符设置为逗号。或者,您可以说 -F=","
、-F,
或使用 -v FS=","
将其作为变量传递。这同样适用于 OFS
.
{print ,,}
打印第 6 个字段两次,然后打印第一个字段。请注意,使用 print
,您提供的每个逗号分隔参数都将与先前设置的 OFS
一起打印。在这里,用逗号。
我有一个包含几千行的 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.
我的脚本哪里做错了?或者,是否有更简单、更快的方法来做到这一点?
编辑
这些才是真实的headers:
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
到 "clean"!)。此外,您可以使用 read -r
来防止反斜杠出现奇怪的行为。
但是让我们看看 awk
如何更快地解决这个问题:
awk 'BEGIN{FS=OFS=","} {print ,,}' test.csv >> output.csv
说明
BEGIN{FS=OFS=","}
这会将输入和输出字段分隔符设置为逗号。或者,您可以说-F=","
、-F,
或使用-v FS=","
将其作为变量传递。这同样适用于OFS
.{print ,,}
打印第 6 个字段两次,然后打印第一个字段。请注意,使用print
,您提供的每个逗号分隔参数都将与先前设置的OFS
一起打印。在这里,用逗号。