【问题标题】:Split and rename single file into multiple files using keywords present in file使用文件中存在的关键字将单个文件拆分并重命名为多个文件
【发布时间】:2020-01-17 23:41:27
【问题描述】:

awk 类命令的新手。我有一个包含以下格式的 SQL DDL 的文本文件。

DROP TABLE IF EXISTS $database.TABLE_A ;
...
...

DROP TABLE IF EXISTS $database.TABLE_B ;
...
...

想将单个文件拆分为多个文件

  1. TABLE_A.SQL
  2. TABLE_B.SQL
  3. TABLE_X.SQL

我可以在下面的 awk 命令的帮助下从单个文件中获取表名。仍在努力使用TABLE_X.SQL 名称拆分和重命名文件。

awk 'FNR==1 {split($5,a,"."); print a[2]}' *.SQL

我使用的是 Windows 10 DOS shell。

【问题讨论】:

  • 添加评论然后投反对票是一种很好的做法。这有助于用户了解如何改进这个问题,或者关闭它真的是一个愚蠢的问题..

标签: linux windows awk sed rename


【解决方案1】:

请您尝试关注一下。

awk '/DROP/{if(file){close(file)};match($0,/TABLE_[^ ]*/);file=substr($0,RSTART,RLENGTH)".SQL"} {print > (file)}' Input_file

【讨论】:

  • 语法错误,^ 意外换行符或字符串结尾。将输入文件替换为可用的单个文件。
  • @Aditya,这个命令对我来说工作得很好,请粘贴你到底在运行什么?
  • @Aditya,在文件名作为变量传递的情况下,我们类似于awk '/DROP/{if(file){close(file)};match($0,/TABLE_[^ ]*/);file=substr($0,RSTART,RLENGTH)".SQL"} {print > (file)}' "$var"
  • 不知道是否相关,但 OP 在 Windows 环境下运行它
  • @Aditya,很抱歉我没有在 windows env 上测试过这个。感谢 Oguz ismail 告知。
【解决方案2】:
awk -F "[. ]" '{print >($(NF-1)".SQL")}' file.sql 

【讨论】:

  • 虽然这段代码可能会解决问题,但一个好的答案应该解释代码的作用以及它如何提供帮助。
  • 下面是我得到的确切错误输出。我只是用export.sql替换了file.sql,实际文件:-awk:cmd。行:1:{打印导出。SQL awk:cmd。 line:1: ^ 语法错误 awk: cmd.行:1:{打印导出。SQL awk:cmd。 line:1: ^ 意外的换行符或字符串结尾
  • @Aditya 这些错误与您使用的外壳有关。我认为您应该在有关您正在处理的环境的问题中添加更多详细信息
  • @oguzismail,我在 Windows 10 DOS shell 上运行命令。
【解决方案3】:

最后我能够在下面的 Shell 脚本的帮助下获得所需的输出,我们可以在 Windows bash shell 中运行它...

#!/bin/bash

#Split single file
awk '/DROP/{x="F"++i;}{print > x".TXT";}' $1

#Create output directory
mkdir -p ./_output

#Move file by chaning extention
for f in *.TXT ; do
  newfilename=$(awk 'FNR==1 {split($5,a,"."); print a[2]}' "$f")
  echo Processed $f ... new file is $newfilename".SQL" ...
       mv $f ./_output/$newfilename".SQL"      
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 2013-08-24
    • 1970-01-01
    • 2011-06-09
    • 2011-07-06
    相关资源
    最近更新 更多