2013-06-25 31 views
1

我創建了一個bash腳本,用於將ASCII文件解析爲逗號分隔的輸出。這很好。現在,這些文件的新文件佈局正在逐漸引入。有條件使用函數?

我的腳本現在有,我想這取決於特定的標記物存在於ASCII文件頭調用兩個剖析功能(每一個佈局)。該腳本正是如此結構:

#!/bin/bash 

function parseNewfile() {...parse stuff...return stuff...} 
function parseOldfile() {...parse stuff...return stuff...} 

#loop thru ASCII files array 
i=0 
while [ $i -lt $len ]; do 
    #check if file contains marker for new layout 
     grep CSVHeaderBox output_$i.ASC 
     #calls parsing function based on exit code 
     if [ $? -eq 0 ] 
     then 
     CXD=`parseNewfile` 
     else 
     CXD=`parseOldfile` 
     fi 

    echo ${array[$i]}| awk -v cxd=`echo $CXD` .... 
     let i++ 
done>>${outdir}/outfile.csv 
... 

腳本不會犯錯了。它總是調用原始函數「parseOldfile」並忽略新函數。甚至當我用新的佈局專門爲我的腳本提供幾個文件。

我想要做的事情似乎很平凡。我在這裏錯過了什麼?

編輯:舊的和新的文件格式的樣本。

1)舊的文件佈局

F779250B 
=====BOX INFORMATION===== 
Model   = R15-100 
Man Date  = 07/17/2002 
BIST Version = 3.77 
SW Version = 0x122D 
SW Name  = v1b1645 
HW Version = 1.1 
Receiver ID = 00089787556 

=====DISK INFORMATION===== 
.... 

2)新的文件佈局

F779250B 
=====BOX INFORMATION===== 
Model   = HR22-100 
Man Date  = 07/17/2008 
BIST Version = 7.55 
SW Version = 0x066D 
SW Name  = v18m1fgu 
HW Version = 2.3 
Receiver ID = 028910170936 

CSVHeaderBox:Platform,ManufactureDate,BISTVersion,SWVersion,SWName,HWRevision,RID 
CSVValuesBox:HR22-100,20080717,7.55,0x66D,v18m1fgu,2.3,028910170936 

=====DISK INFORMATION===== 
.... 
+1

您需要提供一個可重現的示例。 grep + if適用於一個簡單的示例。 – ctn

+0

'grep'似乎沒有在文件'output_ $ i.ASC'中找到字符串'CSVHeaderBox'。顯示這樣的文件的示例內容。 –

+0

你在輸出中看到'CSVHeaderBox'嗎? –

回答

0

我不知道這是否解決了OP的要求。
如果你的函數知道如何解析文件,需要什麼awk

#/bin/bash 

function f1() { 
    echo "f1() says [email protected]" 
} 

function f2() { 
    echo "f2() says [email protected]" 
} 

FUN="f1" 
${FUN} "foo" 
FUN="f2" 
${FUN} "bar" 
+0

Awk在將它寫入我的CSV文件之前清理函數的輸出。 – Chris

1

這可能不是解決你的問題,但一個潛在的性能提升:不是

grep CSVHeaderBox output_$i.ASC 
    #calls parsing function based on exit code 
    if [ $? -eq 0 ] 

使用

if grep -q CSVHeaderBox output_$i.ASC 

qrep -q將成功退出的第一場比賽,所以它不必掃描整個文件。另外,你不必打擾$?變種。

不要這樣做:

awk -v cxd=`echo $CXD` 

這樣做:

awk -v cxd="$CXD" 
0

我有點不好意思寫,但我解決了我的 「問題」。

的gedit(我是在Ubuntu)ERR-ED出幾十倍約「尾隨空格」後,我複製並粘貼我的代碼到一個新的文件,並重新運行我的腳本。

它的工作。

我也沒有解釋爲什麼。

感謝大家抽出寶貴的時間。