使用 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 一起打印。在这里,用逗号。