在shell 脚本中 set numwidth 38 是什么意思
时间: 2024-03-13 20:44:21 浏览: 13
在 shell 脚本中,`set numwidth 38` 是用来设置 shell 输出中数字的宽度的命令。具体来说,它会将输出中数字的宽度设置为 38 个字符。
在默认情况下,shell 输出中数字的宽度是根据数字本身的宽度来自动调整的。但是有时候,我们需要将数字的宽度设置为固定值,以便于对齐输出结果。
例如,以下命令会输出一个表格,其中包含两列数字,第一列的宽度是 10 个字符,第二列的宽度是 20 个字符:
```
printf "%-10s %-20s\n" "Num 1" "Num 2"
printf "%-10s %-20s\n" "123" "456"
printf "%-10s %-20s\n" "789" "101112"
```
在这个例子中,我们使用 `printf` 命令来输出表格,并使用 `%10s` 和 `%20s` 格式化字符串来指定每列的宽度。如果我们想将数字的宽度设置为 38 个字符,可以在脚本中添加 `set numwidth 38` 命令,这样就可以使用 `%38s` 格式化字符串来指定数字的宽度了。
相关问题
使用shell脚本链接Oracle数据库导入表
以下是一个示例脚本,用于连接Oracle数据库并导入表:
```
#!/bin/bash
#设置连接信息
user="username"
password="password"
host="hostname"
port="port"
database="database_name"
#设置导入表信息
schema="schema_name"
table="table_name"
input_file="/path/to/input/file.csv"
#连接数据库并导入表
sqlplus -S $user/$password@$host:$port/$database <<EOF
set feedback off
set verify off
set heading off
set pagesize 0
set linesize 2000
set trimspool on
set echo off
--创建临时表
create table tmp_$table as select * from $schema.$table where 1=2;
--导入数据到临时表
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set colsep ','
set numwidth 38
set trimspool on
set term off
set feedback off
set verify off
set heading off
set pagesize 0
set linesize 32767
set echo off
spool /dev/null
@/path/to/sqlldr.ctl $input_file
spool off
--导入数据到目标表
insert into $schema.$table select * from tmp_$table;
--删除临时表
drop table tmp_$table;
exit;
EOF
```
上面的脚本首先设置了连接信息和导入表的信息。然后,它使用sqlplus命令连接到数据库,并使用SQL语句创建一个临时表。接下来,它使用sqlldr命令将数据从CSV文件加载到临时表中。最后,它使用insert语句将数据从临时表复制到目标表中,并删除临时表。请注意,您需要将脚本中的用户名,密码,主机名,端口号,数据库名称,模式名称,表名称,输入文件路径和sqlldr控制文件路径更改为适合您的环境的值。
#!/bin/bash table='v\$sql' log="./tmp/shell/oracle_log.txt" if [ -e $log ] then rm -f $log fi su - oracle -c "sqlplus -S qgtg/qgtg << END set linesize 500 set pagesize 100 set term off verify off feedback off tab off set numwidth 5 set space 0 set colsep ' | ' column sql_text format a20 column module format a10 column parsing_schema_name format a20 SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY LAST_LOAD_TIME DESC) NUMS,SQL_TEXT,FIRST_LOAD_TIME,LAST_LOAD_TIME,PARSING_SCHEMA_NAME,MODULE FROM $table WHERE TO_DATE(LAST_LOAD_TIME,'YYYY-MM-DD hh24:mi:ss') > TRUNC(SYSDATE-1) ORDER BY LAST_LOAD_TIME DESC) WHERE NUMS < 100; quit; END" >> ./tmp/shell/oracle_log.txt if [ ! -e $log ]; then echo "failed" exit 1 fi echo "successed"解释一下脚本
这个脚本是一个 Bash 脚本,主要功能是连接 Oracle 数据库,查询最近一天内执行过的 SQL 语句,并将查询结果写入日志文件。具体解释如下:
1. `table='v\$sql'`:定义了一个变量 `table`,存储了要查询的表名,这里使用了转义字符 `$`,因为 `$` 符号在 Bash 中有特殊含义,需要转义。
2. `log="./tmp/shell/oracle_log.txt"`:定义了一个变量 `log`,存储了日志文件的路径。
3. `if [ -e $log ]`:判断日志文件是否存在,如果存在则删除。
4. `su - oracle -c "sqlplus ..."`:切换到 Oracle 用户,执行 SQLPLUS 命令,查询数据库,并将查询结果追加到日志文件中。
5. `if [ ! -e $log ]; then ...`:如果日志文件不存在,则输出 `failed`,并退出脚本。
6. `echo "successed"`:输出 `successed`,表示脚本执行成功。
总的来说,这个脚本实现了一个比较简单的数据库查询功能,并将结果写入日志文件,适用于一些简单的数据处理和分析任务。