利用awk赋值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用awk赋值相关的知识,希望对你有一定的参考价值。

#!/bin/sh

ping ip -c 3 > log.txt

awk 'NR==7 if($6=="0%") x=$6' myfile
echo $x
代码意图:
将ping ip的内容保存为log.txt,利用AWK命令将第七行的域6提取出来判断是否为0%并将值赋给变量x。
但实际运行得x为空。
请教高人以上代码错在哪里

参考技术A

因为 awk 脚本中的变量和 shell 变量不是一回事。

这里有段指令可以解释这个问题:

  ping 192.168.2.8 -c 3 | awk 'NR==7 print $6; X=$6; print "X.awk = ", X ' ; echo "X.shell = $X"

所以,如果你希望在后面的 shell 脚本中使用某个 awk 中的值,有两个选择:

    将这个值写入一个文件,在后续的 shell 脚本中读取这个文件内容;

    生成一段 shell 脚本(字符串或文件),然后在 shell 中执行它。

针对于当前这个取丢包率的问题,你可以直接:

  X=$(pint 192.168.2.8 -c 3 | awk 'NR==7print $6')

  echo "X=[$X]"

  if [ “$X" = "0%" ]; then echo OK; else echo oh NO; fi

参考技术B #!/bin/sh

ping ip -c 3 > log.txt

x=`awk 'NR==7 print $6' log.txt`
echo $x

希望对你有帮助。 我已经试过了。追问

请问能否用 “$x" == "0%" 来进行判定?

追答

if [ $x=="0%" ]; then
echo "11111111111"
fi

1、if 与[ 之间必须有空格

2、[ ]与判断条件之间也必须有空格

3、]与; 之间不能有空格

希望对你有帮助。

本回答被提问者采纳
参考技术C x=$(ping 127.0.0.1 -c 3 | grep -oP "([0-9]*)%")

shell awk操作如何使结果赋值进数组

[root@LOAD02 testxdr]# more lftpFilelist.txt
-rw-rw---- 1 iagw iagw 1428387 May 07 06:00 0011025031112015050723
-rw-rw---- 1 iagw iagw 1777425 May 07 06:15 0011025031112015050724
-rw-rw---- 1 iagw iagw 2056771 May 07 06:30 0011025031112015050725
...
有这么一些格式,首先通过awk能否直接赋值进数组Flist,想要的是最后一行
我现在是这么做的
declare -A Flist
declare -A FFlist
Flist=`grep "06:" $Lftplist |awk 'print $9'` #取6点
这个Flist就变成了一行。。很蛋疼
echo $Flist #0011025031112015050723 0011025031112015050724 0011025031112015050725
然后这种也不知道怎么操作进数组了(比如存到FFlist里)
有空格也不能用split...
望大神解答

参考技术A 搞不清楚你到底想问啥艾,awk是可以赋值进数组的,比如将三行中的最后生给弄到数组A中:
tail -1 lftpFileList.txt | awk 'split($0,A," ");'
这就全进数组里了

以上是关于利用awk赋值的主要内容,如果未能解决你的问题,请参考以下文章

精通awk系列(14):细说awk中的变量和变量赋值

shell awk操作如何使结果赋值进数组

shell 下几种常见的变量赋值方法

shell 下几种常见的变量赋值方法

awk划分字段的3种方式

Linux 里面awk begin作用是啥?