Python 解析Select语句中的特定关键字并格式化

Python 解析Select语句中的特定关键字并格式化,python,bash,Python,Bash,我有一个select语句示例: Select D.account_csn, D.account_key, D.industry_id, I.industry_group_nm, I.industry_segment_nm From ecs.DARN_INDUSTRY I JOIN ecs.DARN_ACCOUNT D ON I.SRC_ID=D.INDUSTRY_ID WHERE D.ACCOUNT_CSN='5070000240' 我想将select语句解析为单独的文件。第一个文件名为ecs

我有一个select语句示例:

Select D.account_csn, D.account_key, D.industry_id, I.industry_group_nm, I.industry_segment_nm From ecs.DARN_INDUSTRY I JOIN ecs.DARN_ACCOUNT D
ON I.SRC_ID=D.INDUSTRY_ID
WHERE D.ACCOUNT_CSN='5070000240'
我想将select语句解析为单独的文件。第一个文件名为ecs.DARN_INDUSTRY 在文件中,它应该是这样的:

industry_group_nm
industry_segment_nm 
account_csn
account_key
industry_id
类似地,另一个文件名为ecs.DARN_ACCOUNT,内容如下:

industry_group_nm
industry_segment_nm 
account_csn
account_key
industry_id

如何在Bash或Python中实现这一点???

我怀疑您是否能找到一个真正简单的答案(也许有人能证明不是这样)。但是,您可能会发现


解析一般的SQL语句将是复杂的,并且很难准确地猜测您想要完成什么。但是,我认为您正在尝试通过sql解析提取表和相应的列引用,在这种情况下,请看哪种方法基本上直接问这个问题。

我怀疑您是否能找到真正简单的答案(也许有人能证明不是这样)。但是,您可能会发现


解析一般的SQL语句将是复杂的,并且很难准确地猜测您想要完成什么。但是,我认为您正在尝试通过sql解析提取表和相应的列引用,在这种情况下,请看哪种方法基本上直接问这个问题。

我怀疑您是否能找到真正简单的答案(也许有人能证明不是这样)。但是,您可能会发现


解析一般的SQL语句将是复杂的,并且很难准确地猜测您想要完成什么。但是,我认为您正在尝试通过sql解析提取表和相应的列引用,在这种情况下,请看哪种方法基本上直接问这个问题。

我怀疑您是否能找到真正简单的答案(也许有人能证明不是这样)。但是,您可能会发现


解析一般的SQL语句将是复杂的,并且很难准确地猜测您想要完成什么。但是,我认为您正试图通过sql解析来提取表和相应的列引用,在这种情况下,请看哪种方法基本上是直接问这个问题的

awk 'NR==1{gsub(/^.*\./,"",$5);gsub(/^.*\./,"",$6);gsub(/.$/,"",$5); printf $5"\n"$6"\n" > "DARN_INDUSTRY"; gsub(/^.*\./,"",$2);gsub(/^.*\./,"",$3);gsub(/^.*\./,"",$4);gsub(/.$/,"",$2);gsub(/.$/,"",$3);gsub(/.$/,"",$4); printf $2"\n"$3"\n"$4"\n" > "DARN_ACCOUNT"}' file
说明:

  • gsub(/^.*\./,“”,$5)
    删除列号5中第一个
    符号之前的所有字符

  • printf$5”\n“$6”\n“>“DARN_INDUSTRY”
    printf
    命令的输出重定向到名为
    DARN_INDUSTRY
    的文件

  • gsub(/.$/,“”,$4)
    删除第4列中的最后一个字符

    • 这里有一个通过awk的长工作命令

      awk 'NR==1{gsub(/^.*\./,"",$5);gsub(/^.*\./,"",$6);gsub(/.$/,"",$5); printf $5"\n"$6"\n" > "DARN_INDUSTRY"; gsub(/^.*\./,"",$2);gsub(/^.*\./,"",$3);gsub(/^.*\./,"",$4);gsub(/.$/,"",$2);gsub(/.$/,"",$3);gsub(/.$/,"",$4); printf $2"\n"$3"\n"$4"\n" > "DARN_ACCOUNT"}' file
      
      说明:

      • gsub(/^.*\./,“”,$5)
        删除列号5中第一个
        符号之前的所有字符

      • printf$5”\n“$6”\n“>“DARN_INDUSTRY”
        printf
        命令的输出重定向到名为
        DARN_INDUSTRY
        的文件

      • gsub(/.$/,“”,$4)
        删除第4列中的最后一个字符

        • 这里有一个通过awk的长工作命令

          awk 'NR==1{gsub(/^.*\./,"",$5);gsub(/^.*\./,"",$6);gsub(/.$/,"",$5); printf $5"\n"$6"\n" > "DARN_INDUSTRY"; gsub(/^.*\./,"",$2);gsub(/^.*\./,"",$3);gsub(/^.*\./,"",$4);gsub(/.$/,"",$2);gsub(/.$/,"",$3);gsub(/.$/,"",$4); printf $2"\n"$3"\n"$4"\n" > "DARN_ACCOUNT"}' file
          
          说明:

          • gsub(/^.*\./,“”,$5)
            删除列号5中第一个
            符号之前的所有字符

          • printf$5”\n“$6”\n“>“DARN_INDUSTRY”
            printf
            命令的输出重定向到名为
            DARN_INDUSTRY
            的文件

          • gsub(/.$/,“”,$4)
            删除第4列中的最后一个字符

            • 这里有一个通过awk的长工作命令

              awk 'NR==1{gsub(/^.*\./,"",$5);gsub(/^.*\./,"",$6);gsub(/.$/,"",$5); printf $5"\n"$6"\n" > "DARN_INDUSTRY"; gsub(/^.*\./,"",$2);gsub(/^.*\./,"",$3);gsub(/^.*\./,"",$4);gsub(/.$/,"",$2);gsub(/.$/,"",$3);gsub(/.$/,"",$4); printf $2"\n"$3"\n"$4"\n" > "DARN_ACCOUNT"}' file
              
              说明:

              • gsub(/^.*\./,“”,$5)
                删除列号5中第一个
                符号之前的所有字符

              • printf$5”\n“$6”\n“>“DARN_INDUSTRY”
                printf
                命令的输出重定向到名为
                DARN_INDUSTRY
                的文件

              • gsub(/.$/,“”,$4)
                删除第4列中的最后一个字符

              感谢您回答我的问题。但这个解决方案似乎适用于特定的场景。我可能有其他可能难以区分的表格。只需按列数。我希望得到一个脚本,可以通过regex和一些模式匹配标准动态生成文件。谢谢你回答我的问题。但这个解决方案似乎适用于特定的场景。我可能有其他可能难以区分的表格。只需按列数。我希望得到一个脚本,可以通过regex和一些模式匹配标准动态生成文件。谢谢你回答我的问题。但这个解决方案似乎适用于特定的场景。我可能有其他可能难以区分的表格。只需按列数。我希望得到一个脚本,可以通过regex和一些模式匹配标准动态生成文件。谢谢你回答我的问题。但这个解决方案似乎适用于特定的场景。我可能有其他可能难以区分的表格。只需按列数。我希望得到一个脚本,可以通过regex和一些模式匹配标准动态生成文件。我来看看。谢谢你给我看这个模块。我来看看。谢谢你给我看这个模块。我来看看。谢谢你给我看这个模块。我来看看。谢谢你给我看这个模块。