【问题标题】:How to ignore change in line using AWK如何使用 AWK 忽略行内变化
【发布时间】:2020-07-06 16:41:22
【问题描述】:

我正在编写一个 shell 脚本,我需要在其中提取插入数据的表的名称。 因此,如果 sql 脚本包含诸如“插入到 table_name”之类的语句,则该脚本应该取出表名。

这就是我正在使用的

awk '{IGNORECASE = 1} /INSERT INTO/ && !a[$3]++{print $3}' $check_in_script >> $TBL_LST awk '{IGNORECASE = 1} /UPDATE/ && !a[$2]++{print $2}' $check_in_script >> $TBL_LST

这运行良好,但有时脚本在插入和表名之间有换行符,我也需要为此添加一个案例。

insert into 
table_name

如何确保即使行发生变化,awk 语句也会取出表名

谢谢

【问题讨论】:

  • 欢迎来到 SO,特别感谢您在问题中以代码形式分享您的努力。请在您的问题中添加输入和预期输出示例,然后告诉我们。
  • edit 你的问题是显示几行真正具有代表性的示例输入/输出,其中包含你想要在上下文中匹配的文本以及你想要匹配和不想匹配的其他文本。
  • @yutivee : 你如何处理这样的情况:insert into 不是 SQL 命令的一部分,而是字符串的一部分,例如 update table set text = 'insert into' ?

标签: sql bash shell awk scripting


【解决方案1】:

您可以使用 sed 删除输入文件中的新行。

sed '/Insert/I{N;s/\n//g}'

演示:

$echo 'insert into 
table_name'  
insert into 
table_name
$echo 'insert into 
table_name'  |  sed  '/Insert/I{N;s/\n//g}'
insert into table_name
$


【讨论】:

  • 您好 Digvijay,感谢您的回答。我想知道我们是否可以在我已经拥有的 awk 语句中做一些事情,因为在很多情况下都不允许修改基础文件。
猜你喜欢
  • 2012-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-11
  • 1970-01-01
  • 2022-01-18
  • 2019-11-21
相关资源
最近更新 更多