我在主机级别有一个文本文件,例如:/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,请小心。有时美元符号需要额外的反斜杠