Bash 函数的有条件使用?
我创建了一个bash脚本,它将ASCII文件解析为逗号分隔的输出。效果很好。现在,这些文件的新文件布局正在逐步引入 我的脚本现在有两个解析函数(每个布局一个),我想根据ASCII文件头中的特定标记调用它们。脚本的结构如下:Bash 函数的有条件使用?,bash,Bash,我创建了一个bash脚本,它将ASCII文件解析为逗号分隔的输出。效果很好。现在,这些文件的新文件布局正在逐步引入 我的脚本现在有两个解析函数(每个布局一个),我想根据ASCII文件头中的特定标记调用它们。脚本的结构如下: #!/bin/bash function parseNewfile() {...parse stuff...return stuff...} function parseOldfile() {...parse stuff...return stuff...} #loop
#!/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=====
....
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=====
....
2) 新文件布局
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=====
....
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=====
....
我不确定这是否满足OP的要求。
如果你的函数知道如何解析文件,
awk
需要什么
#/bin/bash
function f1() {
echo "f1() says $@"
}
function f2() {
echo "f2() says $@"
}
FUN="f1"
${FUN} "foo"
FUN="f2"
${FUN} "bar"
我不确定这是否满足OP的要求。
如果你的函数知道如何解析文件,
awk
需要什么
#/bin/bash
function f1() {
echo "f1() says $@"
}
function f2() {
echo "f2() says $@"
}
FUN="f1"
${FUN} "foo"
FUN="f2"
${FUN} "bar"
这可能无法解决您的问题,但可能会提高性能:而不是
grep CSVHeaderBox output_$i.ASC
#calls parsing function based on exit code
if [ $? -eq 0 ]
使用
qrep-q将在第一次匹配时成功退出,因此它不必扫描整个文件。另外,你不必为美元而烦恼?变种
不要这样做:
awk -v cxd=`echo $CXD`
这样做:
awk -v cxd="$CXD"
这可能无法解决您的问题,但可能会提高性能:而不是
grep CSVHeaderBox output_$i.ASC
#calls parsing function based on exit code
if [ $? -eq 0 ]
使用
qrep-q将在第一次匹配时成功退出,因此它不必扫描整个文件。另外,你不必为美元而烦恼?变种
不要这样做:
awk -v cxd=`echo $CXD`
这样做:
awk -v cxd="$CXD"
我写这篇文章有点不好意思,但我解决了我的“问题” 在gedit(我在Ubuntu上)在“尾随空格”问题上犯了几十次错误后,我将代码复制并粘贴到一个新文件中,然后重新运行脚本 成功了 我无法解释原因
感谢大家花时间写这篇文章。我有点不好意思,但我解决了我的“问题” 在gedit(我在Ubuntu上)在“尾随空格”问题上犯了几十次错误后,我将代码复制并粘贴到一个新文件中,然后重新运行脚本 成功了 我无法解释原因
感谢大家抽出时间。您需要提供一个可复制的示例。grep+if用于一个简单的示例。
grep
似乎在文件output\u$i.ASC
中找不到字符串CSVHeaderBox
。显示这样一个文件的示例内容。您在输出中看到了CSVHeaderBox
吗?您需要将-q
和-s
添加到grep的选项中。@AnsgarWiechers:我将在我的原始帖子中提供一个。准备。你需要提供一个可复制的例子。grep+if用于一个简单的示例。grep
似乎在文件output\u$i.ASC
中找不到字符串CSVHeaderBox
。显示这样一个文件的示例内容。您在输出中看到了CSVHeaderBox
吗?您需要将-q
和-s
添加到grep的选项中。@AnsgarWiechers:我将在我的原始帖子中提供一个。Stand by.Awk用于在将函数输出写入我的CSV文件之前清理该函数的输出。Awk用于在将函数输出写入我的CSV文件之前清理该函数的输出。