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=====
....
4

3 回答 3

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"
于 2013-06-25T18:24:40.863 回答
0

我不确定这是否能解决 OP 的要求。如果您的函数知道如何解析文件
,需要什么?awk

#/bin/bash

function f1() {
    echo "f1() says $@"
}

function f2() {
    echo "f2() says $@"
}

FUN="f1"
${FUN} "foo"
FUN="f2"
${FUN} "bar"
于 2013-06-25T17:21:43.803 回答
0

我有点不好意思写这个,但我解决了我的“问题”。

在 gedit (我在 Ubuntu 上)对“尾随空格”进行了几十次错误处理后,我将代码复制并粘贴到一个新文件中,然后重新运行我的脚本。

有效。

我没有解释为什么。

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

于 2013-06-26T16:43:46.137 回答