使用AWK从输出中解析值

时间:2014-03-31 19:26:55

标签: sed awk

我需要在输出的第100秒之后从FTP get命令解析值。

ftp> 8.591220.98disconnect

在Stack成员的帮助下,我一直在使用以下方法获取数据:

ut1intput=$(awk 'NR==70{for(i=1;i<=NF;i++)if($i=="ftp>")print $(i+1)} filename.txt)

我使用sed来删除“#34;断开&#34;从输出,但我很困惑如何只打印第二个输出的第100个,即:8.591220.98

awk是否适合执行此任务?

我很感激任何建议。

2 个答案:

答案 0 :(得分:1)

解决眼前的问题:

如果您只需从输入数据中提取类似数字的令牌,则只需使用tr,如下所示:

tr -C -d '0-9.' <<<'ftp> 8.591220.98disconnect' # -> '8.591220.98'

但使用awk将所需操作集成到原始sub()程序更有意义,如@HåkonHægland的回答:

ut1intput=$(awk '
  NR==70 {
    for(i=1;i<=NF;i++) { 
      if($i=="ftp>") {
        sub(/disconnect$/, "", $(i+1));  # remove 'disconnect' suffix
        print $(i+1)
      }
    }
  }' filename.txt)

答案 1 :(得分:0)

awk命令sub(/disconnect/,"", $i)将从字段编号disconnect中删除单词$i。例如:

echo "8.591220.98disconnect" | awk '{sub(/disconnect/,"", $1)}1'

给出:

8.591220.98