【发布时间】:2021-04-08 23:43:33
【问题描述】:
我有两个文件 $A 和 $B
number1 = 460
number2 = 12
number3 > 5
number4 > 20
number5 != 39
number6 != 0
$B 包含
number1 453
number2 12
number3 7
number4 19
number5 39
number6 4
我有一个 awk 命令,它比较两个文件并告诉我数字是否不匹配
output=`awk '
{
getline buf <f2;
split( buf, a, " " );
if( $1 == a[1] && $2 == ">" && $3+0 > a[2]+0 )
printf( "%s\n", buf );
else if( $1 == a[1] && $2 == "!=" && $3+0 == a[2]+0 )
printf( "%s\n", buf );
else if( $1 == a[1] && $2 == "=" && $3+0 != a[2]+0 )
printf( "%s\n", buf );
}
' f2="$B" $A`
echo "$output"
number1 453
number4 19
number5 39
我正在尝试得到这个输出:
echo "$output"
This is the line that failed: number1 = 460 #coming from $A
This is the correct number: number1 453 #coming from $B
This is the line that failed: number4 > 20 #coming from $A
This is the correct number: number4 19 #coming from $B
This is the line that failed: number5 != 39 #coming from $A
This is the correct number: number5 39 #coming from $B
【问题讨论】:
-
awk 是一种独立的编程语言,不是 bash 的一部分。 bash 有一个 printf,但它与 awk 的 printf 完全分开。可以做很多事情来使这一点更清楚。
-
@CharlesDuffy 谢谢我会编辑标题
-
顺便说一句,
echo $output本身就是有缺陷的(特别注意它会吃掉你的换行符并在同一行打印所有输出,即使你已经将代码固定到了awk 正在编写两行单独的输出); 总是改为echo "$output"-- 请参阅I just assigned a variable, butecho $variableprints something different! -
@CharlesDuffy 同意了。我修好了
-
最后一行“请注意,运算符可能会更改为 > 或 > 或
<等,而不是=。但是您的输入和输出不包括这些情况。如果$A有number1 > 100而$B有number1 > 150怎么办?输出会是什么?或者$B只有=?如果是这样,您需要提及。