如何在 Sybase 级别使用 awk 或 sed 命令(操作系统级别命令)

如何在 Sybase 级别使用 awk 或 sed 命令(操作系统级别命令)

我在主机级别有一个文本文件,例如:/tmp/文件.txt。所以我有一个脚本,我需要逐行读取文件.txt,所以我使用了sed命令。因此,我在脚本中使用 while 循环,并且已登录到 DB 级别,我如何使用sed命令或类似命令sed来访问 file.txt 中的一行数据?在数据库级别

前任:sed -n '5p' "/tmp/file.txt" (or) awk 'NR==5' /tmp/file.txt

所以我想在isql命令之后在数据库级别检查这个输出?可以吗?有人能建议替代方案吗?

答案1

您可能正在寻找 Sybase Adaptive Server 的xp_cmdshell

描述

在运行 Adaptive Server 的主机系统上执行本机操作系统命令。

句法

xp_cmdshell command [, no_output]

对于您的命令来说,将是:

xp_cmdshell 'sed -n 5p /tmp/file.txt'

xp_cmdshell 'awk "NR==5" /tmp/file.txt'

小心不同的引述在引号内使用引号时的类型。

答案2

回复:那么我想在 isql 命令之后在 db 级别检查此输出吗?可以吗?有人可以建议替代方案吗?

您是说:1) 想要使用 shell 脚本语法处理数据库级命令的输出?或者,2) 获取 shell 脚本的输出并将其发送到数据库进行处理?

如果是 1),则有 isql 的替代方案,称为 sqsh。您可以使用 sqsh 执行此操作:

sqsh -SMYSERVER -Dmydb -Umylogin -w180
<mypassword>
select blah_column from blah_table
go |  sed 's/thingy/widget/g'

如果是 2),则让您的 shell 脚本生成 SQL 命令用于输出,并使用 isql -i (或 sqsh -i) 针对数据库运行该命令

注意,如果在 sqsh 中使用 awk,请小心。有时美元符号需要额外的反斜杠

相关内容