使用awk输出作为变量进行字符串比较

时间:2018-08-13 13:05:46

标签: macos shell awk

我正在过滤macOS(High Sierra)上的apply(mydata, 2, function(x) c(x[is.na(x)], x[!is.na(x)])) # V1 V2 V3 V4 V5 V6 #[1,] 1 NA NA NA NA NA #[2,] 2 1 NA NA NA NA #[3,] 3 2 1 NA NA NA #[4,] 4 3 2 1 NA NA #[5,] 5 4 3 2 1 NA #[6,] 6 5 4 3 2 1 的输出,以使用简单的if语句触发操作,尽管相应的字符串似乎匹配也没有触发该操作(使用ifconfig

运行脚本时,如果网络echo处于活动状态,则预期的操作是打印OK。

我尝试过:

  • en1printf "%s"命令中
  • awk使用双引号(简单)
  • "active"保留在变量中以进行比较
  • active代替en1_status=`...`

没有成功。

en1_status=$(...)

并且#!/bin/bash en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'` if [ "$en1_status" = active ]; then echo OK fi 似乎与$en1_status相匹配:

active

2 个答案:

答案 0 :(得分:5)

这通常意味着您的变量中包含不可打印的字符,例如语法突出显示或DOS换行符。

发生这种情况的一种简单方法是,如果您将grep实例设置为始终插入颜色代码,例如--color=always,而不是默认的(更安全的)--color=auto。 / p>

要对此进行跟踪,请比较以下命令的输出:

printf '%s' "$en1_status" | xxd
printf '%s' inactive | xxd

您还可以通过让grep进行搜索来模拟awk的配置:

en1_status=$(ifconfig en1 | awk '/status: / { print $2 }')

答案 1 :(得分:0)

如果您在if比较的右边加双引号,则您的解决方案可以在MacOS上使用(我用inactive代替了我的本地测试,因为该接口在我本地没有激活): / p>

~/> cat test.sh

#!/bin/bash
en1_status=`ifconfig en1 | grep "status: " | awk '{print $2}'`
if [ "$en1_status" = "inactive" ]; then
    echo OK
fi

当我运行它时:

~/> ./test.sh 
OK