Database 使用shell脚本对文件中不同长度的所有列进行零填充

Database 使用shell脚本对文件中不同长度的所有列进行零填充,database,shell,sh,Database,Shell,Sh,我必须使用以“|”分隔的加载文件将数据加载到informix数据库中 表的架构为: A列:字符(9) B列:字符(6) C列:字符(3) D列:char(8)。 我加载的文件包含的数据格式与需要插入数据库的格式不同 由于数据太大,我不想依赖excel。如果我剪切文件中的每一列,然后使用printf(“%09d”col1,“%06d”col2)等等,则需要更长的时间 任何人都可以建议使用更好的shell命令。让我们将此作为要重新格式化的示例数据文件: $ cat data 1|2|3|4 5|6|

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

表的架构为: A列:字符(9) B列:字符(6) C列:字符(3) D列:char(8)。 我加载的文件包含的数据格式与需要插入数据库的格式不同

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


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

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

$ 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
    类似,它以指定格式打印四列


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

$ 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
    类似,它以指定格式打印四列

谢谢:)我会试试这个谢谢:)我会试试这个