当我读取文本文件中每行的第3个字(十六进制字符串)并将其与十六进制数字进行比较时,我遇到了一些问题。有人可以帮我吧。
#!/bin/bash
A=$1
cat $A | while read a; do
a1=$(echo \""$a"\" | awk '{ print $3 }')
#echo $a > cut -d " " -f 3
echo $a1
(("$a1" == 0x10F7))
echo $?
done
但是当我在下面使用时,比较正确,
a1= 0xADCAFE
(( "$a1" == 0x10F7 ))
echo $?
那么为什么当我在下面阅读时显示问题,
a1=$(echo \""$a"\" | awk '{ print $3 }')
or> a1=$(echo $a | awk '{ print $3 }')
echo $a
打印预期的十六进制值,但不会进行比较。
此致
答案 0 :(得分:2)
在awk '$3 == 4343' "$1"
循环中运行Awk是一个反模式。只需在Awk中循环;它很擅长。
"0x10F7"
如果您要与价值为awk '$3 == "0x10F7"' "$1"
的字符串进行比较,那么
awk '$3 ~ /^(0x10[Ff]7|4343)$/' "$1"
如果你想匹配,不区分大小写等,正则表达式是一种很好的方法。
$1
注意shell如何处理双引号中的$3
,并在Awk运行之前被脚本的第一个命令行参数的(正确引用!)副本替换,而awk单引号中的脚本有自己的命名空间,因此$a
是一个Awk变量,它引用当前输入行中的第三个字段。
无论哪种方式,请避免useless use of cat
和始终始终引用包含双引号文件名的变量。
这是双字引号。您似乎尝试了一个危险的裸"\"$a\""
和双重引用的"$a"
,其中简单的FIFO_ELEM_AT(p_fifo, index) ((uint8_t*) ((uint8_t*) p_fifo->elem_array) + (p_fifo->elem_size) * (index))
将是您真正想要的。
答案 1 :(得分:1)
感谢大家的回复,现在我的脚本运行正常。我试图匹配两个文件,下面的脚本做的目的
org.apache.spark.mllib.classification.LogisticRegressionModel cannot be cast to java.lang.String