簡體   English   中英

在shell腳本循環中假脫機多個文件

[英]spool multiple files in loop of shell script

我正在嘗試后台處理多個文件以減少手動工作。

SQL 文件 (spool_csv.sql) 有一個 select 語句,我需要將其作為 CSV 文件進行假脫機,如下所示

set colsep ','
set linesize 9999
set trimspool on
set heading on
set pagesize 0 embedded on
set wrap off
set feedback off
set newpage 0
set verify off
set arraysize 5000
SET TERMOUT OFF
spool C:\Users\spool_csv\csv_03\csv_file_03-jan_&1..csv
select * from CRAFT_MVT_H where code = '&1';
spool off;
exit;

然后我有簡單的 shell 腳本 (spool_csv.sh),它循環遍歷一個文件以將參數傳遞給 SQL 文件並在運行時更改假脫機文件的名稱以及 SELECT 語句的 where 子句。

for line in `cat chartfield1_03.txt`
do
  echo $line
  sqlplus -s user/password@SID @spool_03.sql $line
done 

chartfield1_03.txt 包含——

778
769
741 
728
739
759
737
752
710
734
747

我需要為 chartfield1_03.txt 的每一行(比如值)有單獨的 csv 文件

所以它會像

csv_file_03-jan_778.csv
csv_file_03-jan_769.csv
csv_file_03-jan_741.csv
and so on....

但是當我運行 shell 腳本時,它只創建一個用於 chartfield1_03.txt 最后一行的 CSV 文件,即 csv_file_03-jan_747.csv

我不確定為什么在我將假脫機文件作為參數傳遞並在循環中調用它時沒有創建其他文件,因此每次它都應該打開一個新的 SQL 會話並創建新的假脫機文件。

請幫助我理解我在這里缺少什么!!

所以最后我發現了為什么它不工作,因為我在 SQLPLUS 命令中錯過了 EOF 在添加如下后它工作正常。

我找到的解決方案。

#!/bin/bash

for line in `cat chartfield1_03.txt`
do
  echo $line
  dt1 = `sqlplus -s HEW/hew_dba14@DEVHEW<<EOF
  whenever sqlerror exit sql.sqlcode;
  @spool_03.sql $line;
EOF` &

done

一種可能的解決方案是在每次sqlplus執行時創建相同的文件並在 shell 中重命名它。 為此,您可以更改行:

spool C:\Users\spool_csv\csv_03\csv_file_03-jan_&1..csv

成為

spool C:\Users\spool_csv\csv_03\csv_file_03-jan_..csv

並在shell腳本中:

sqlplus -s user/password@SID @spool_03.sql $line

成為

sqlplus -s user/password@SID @spool_03.sql 
mv "C:\Users\spool_csv\csv_03\csv_file_03-jan_..csv" "C:\Users\spool_csv\csv_03\csv_file_03-jan_${line}.csv"

我的解決方案。

如果您有任何其他解決方案,請提供任何其他解決方案:)

#!/bin/bash

for line in `cat chartfield1_03.txt`
do
  echo $line
  dt1 = `sqlplus -s HEW/hew_dba14@DEVHEW<<EOF
  whenever sqlerror exit sql.sqlcode;
  @spool_03.sql $line;
EOF` &

done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM