我想将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:找不到命令
答案 0 :(得分:2)
如果代码中的[
和$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 ]
您应该最佳地引用变量以防止出现空格和圆形字符的问题:
[ "$a1" = "$b1" ]
答案 1 :(得分:2)
使用awk替换所有
#!/bin/bash
A="$HOME/A.txt"
B="$HOME/B.txt"
awk 'NR==FNR{a[$1];next} $1 in a' $B $A