比较外壳中的十六进制数字



我想将 A.txt 中每行的第一个元素与 B.txt 行的第一个元素进行比较,如果它们匹配,请打印 A 的那行。A 和 B 的第一行元素都是十六进制数,我基于 https://askubuntu.com/questions/366879/awk-comparing-the-value-of-two-variables-in-two-different-files 编写了以下代码。

#!/bin/bash
A="$HOME/A.txt"
B="$HOME/B.txt"
cat $A | while read a; do
a1=$(echo $a | awk ' { print $1 }')
    cat $B | while read b; do
        b1=$(echo $b | awk ' { print $1 }')
        if [ $a1 == $b1 ]; then
            echo $a
        fi
    done
done

这是我得到的:第 9 行:[0x6200e001:找不到命令

如果代码中的[$a1之间没有空格,则会出现此问题。始终测试您发布的确切代码 - 不要假设您的干净版本会出现与实际代码相同的问题。

以下是重现它的方法:

$ cat file
a1=0x6200e001
b1=$a1
[$a1 == $b1 ]
$ bash file
file.sh: line 3: [0x6200e001: command not found
$ shellcheck file
In file line 3:
[$a1 == $b1 ]
 ^-- SC1035: You need spaces after the opening [ and before the closing ].

解决方法是添加空格:

[ $a1 == $b1 ]

您还应该最好地引用变量,以防止出现空格和 glob 字符的麻烦:

[ "$a1" = "$b1" ]

使用 awk 替换所有

#!/bin/bash
A="$HOME/A.txt"
B="$HOME/B.txt"
awk 'NR==FNR{a[$1];next} $1 in a' $B $A

相关内容

  • 没有找到相关文章

最新更新