1

ASCII ファイルをコンマ区切りの出力に解析する bash スクリプトを作成しました。それはうまくいきました。現在、これらのファイルの新しいファイル レイアウトが徐々に導入されています。

私のスクリプトには、ASCII ファイル ヘッダーに存在する特定のマーカーに応じて呼び出したい 2 つの解析関数 (レイアウトごとに 1 つ) があります。スクリプトは次のように構成されています。

#!/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 に答える