使用shell脚本在文件中填充不同长度的所有列

时间:2016-05-29 08:17:45

标签: database shell sh

我必须使用加载文件“|”将数据加载到informix数据库中分隔。

表的架构是: A栏:char(9) B栏:char(6) C栏:char(3) D栏:char(8)。 我加载的文件的数据格式与插入数据库所需的格式不同。

由于数据太大,我不想依赖excel。如果我在文件中剪切每一列,然后使用printf("%09d" col1, "%06d" col2)等等,则需要更长的时间。

任何人都可以建议使用更好的shell命令。

1 个答案:

答案 0 :(得分:4)

让我们将其作为我们要重新格式化的示例数据文件:

$ cat data
1|2|3|4
5|6|7|8

使用awk,我们可以创建| - 分隔的9宽,6宽,3宽和8宽格式:

$ awk -F\| '{printf "%09d|%06d|%03d|%08d\n",$1,$2,$3,$4}' data
000000001|000002|003|00000004
000000005|000006|007|00000008
awk通常非常快速有效。

如何运作

Awk隐式处理提供的文件中的每一行,一次一行。

  • -F\|

    这告诉awk使用|作为字段分隔符。我们必须逃避|,因为它是一个shell活动角色。

  • printf "%09d|%06d|%03d|%08d\n",$1,$2,$3,$4

    与其他语言中的printf类似,这会打印出指定格式的四列。