2016-10-07 84 views
1
工作

我測試過在終端下面一行,它完美的作品:AWK輸出不中使用bash

zcat file_2016_01_01.gz | awk 'BEGIN { FS= "|"}; {if ($1 =="START" && $7 == "1234") {flag=1}} flag ; {if ($1=="STOP"){flag=0}}'> exit.txt 

但是當我嘗試在bash腳本的幾個文件中提取自動輸出文件是空的:

更新的代碼:for循環中的評論顯示,這是沒有問題的

#!/bin/bash 
REF="ref" 
CODE="code" 
REP="path_to_file" 
#for m in 0{1..3} 
#do 
# for d in 0{1..9} {10..31}; 
# do 
# DATE="2016_${m}_${d}" 
DATE="2016_01_04" 

EXIT=${REF}_${CODE}_${DATE}.gz 
if [ -e $REP/file_$DATE.gz ] 
    then 
      zcat $REP/file_$DATE.gz | awk 'BEGIN { FS= "|"}; {if ($1 =="START" && $7 == "'"$CODE"'" && $18== "'"$REF"'") {flag=1}} flag ; {if ($1=="STOP"){flag=0}} ' > $EXIT 
    else 
      echo "File not found!" 
fi 
# done 
#done 
exit 0 

可能有人幫助我嗎?非常感謝!

+1

http://www.shellcheck.net/自動找到您的直接錯誤和其他幾個錯誤。讓人們參與未來之前,考慮通過它運行代碼。 –

+0

我看到了拼寫檢查器的評論,並且代碼中沒有任何實際問題,但是我更新了代碼,並使用了「傳遞」拼寫檢查器的版本。 – nanicpc

+0

你的代碼仍然是錯誤的,因爲它們關閉了一些警告,當可能觸發錯誤的值被賦予不作爲常量時。這是我有點不同意@koalaman(其維護者)的地方。 '[-e「$ REP/file_ $ DATE.gz」]需要引用; 'zcat'$ REP/file_ $ DATE.gz「'同樣需要引號。 –

回答

2

問題似乎是在這裏:

DATE="2016_$m_$d" 

由於_被認爲是變量名的一部分,它是有效地使其:

DATE="2016_${m_}${d}" 

既然你沒有一個變量命名$m_,有效您將在DATE變量中獲得"2016_$d"的值。

您可以通過使用修復:

DATE="2016_${m}_${d}" 

還建議檢查shellcheck.net腳本查找和修復等明顯的錯誤。

+0

爲了證明這是否是問題,我刪除了for循環並寫入單個日期DATE =「2016_01_04」。輸出文件仍然是空的。 PS:我做了拼寫檢查,感謝 – nanicpc

+0

在主要問題 – nanicpc

+0

使用'bash -x script.sh'運行腳本並查看每個步驟的輸出。這將幫助您找到哪個命令失敗。 – anubhava