-3
awk < MigStat.stat -F: '{ if ($a == "load")b=8; } $1 == "D0001" && FNR== '$c' {print $b}'

现在我想打印列 $b 中的值,但在这种情况下它打印整行。我想要做的是使用 if 语句中 b 的值来打印该列中的值

4

2 回答 2

2

要传入值,请使用以下-v选项:

awk -F: -v a=2 -v c=10 '$a=="load"{b=8}$1=="D0001"&&FNR==c{print $b}' MigStat

笔记:

  • 要传入变量,请使用 的-v选项awk

  • awk读取您不需要使用重定向的文件。

  • 的结构awkcondition{block}

  • awk将变量初始化为0所以如果b没有在块中设置$a=="load"{b=8}那么{print $b}{print $0}$0整行的位置。

于 2013-04-08T12:22:31.227 回答
1

您不需要冗余分配b=8. 如果脚本与您在此处发布的一样,则根本不需要$b

如果$a, $c是外壳变量:

awk -F: -v a="$a" -v c="$c" 'a=="load"&&$1=="D0001"&&NR==c{print $8;exit}' MigStat.stat

并在print $8调用exit;停止 awk 处理更多行后更好。

于 2013-04-08T12:32:31.567 回答