2013-06-25 30 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出几十倍约“尾随空格”后,我复制并粘贴我的代码到一个新的文件,并重新运行我的脚本。

它的工作。

我也没有解释为什么。

感谢大家抽出宝贵的时间。