unix 如果CSV列除标题外为空,如何使用sqlloader加载列?

atmip9wb  于 2023-02-22  发布在  Unix
关注(0)|答案(1)|浏览(186)

我想使用sqlloader加载CSV文件,而不必每次都编辑CSV文件。当文件发送给我时,第一列中的数据只包含在其余数据上方的标题中。第一个代码片段是我收到的虚假数据的示例,第二个代码片段是我想将其更改为的内容。
SQL表中的每一行都需要包含第一行的编号。

1,Intern,
,1/8/2023,Bob
,5/3/2022,Alice
,7/25/2022,Charles
2,Assistant,
,1/8/2023,Heather
,5/3/2022,Harold
,7/25/2022,Dave
3,Manager,
,1/1/2023,Tim
,1/8/2023,Lyon
,5/3/2022,Greg
,7/25/2022,Tyler
5,Head Manager,
,1/8/2023,Charles
,5/3/2022,Zack

我需要它的外观:

1,Intern,
1,1/8/2023,Bob
1,5/3/2022,Alice
1,7/25/2022,Charles
2,Assistant,
2,1/8/2023,Heather
2,5/3/2022,Harold
2,7/25/2022,Dave
3,Manager,
3,1/1/2023,Tim
3,1/8/2023,Lyon
3,5/3/2022,Greg
3,7/25/2022,Tyler
5,Head Manager,
5,1/8/2023,Charles
5,5/3/2022,Zack

我认为可能有一些方法可以在调用sqlldr命令(如sed或awk)的shell脚本中编辑它们。

qyyhg6bp

qyyhg6bp1#

对于问题中所示的输入文件(input.csv),命令

awk -F, -v 'OFS=,' '{ if($1!="") x=$1; else $1=x } 1' input.csv

印刷品

1,Intern,
1,1/8/2023,Bob
1,5/3/2022,Alice
1,7/25/2022,Charles
2,Assistant,
2,1/8/2023,Heather
2,5/3/2022,Harold
2,7/25/2022,Dave
3,Manager,
3,1/1/2023,Tim
3,1/8/2023,Lyon
3,5/3/2022,Greg
3,7/25/2022,Tyler
5,Head Manager,
5,1/8/2023,Charles
5,5/3/2022,Zack

说明:

  • -F,将输入字段分隔符设置为,
  • 设置输出字段分隔符,
  • if($1!="") x=$1保存第1列的非空值
  • else $1=x用保存的值替换空值
  • 1始终为真条件,默认操作为print{print}的快捷方式)

相关问题