从bash中的grep输出中读取数值

时间:2016-05-19 19:16:49

标签: bash

我有一个由文本行填充的文件,我对其中的一组感兴趣,每行都以相同的单词开头,每行中有两个数字,我必须稍后详细说明,它们总是在相同的位置,例如:

Round trip time was 49.9721 milliseconds in repetition 5 tcp_ping received 128 bytes back

我正在考虑尝试使用grep将想要的行抓取到一个新文件中,然后将这个新文件的内容放入一个数组中,以便在详细说明中轻松访问它,但这不起作用,任何提示?

#!/bin/bash
InputFile="../data/N.dat"
grep "Round" ../data/tcp_16.out > "$InputFile"
IFS=' ' read -a array <<< "$InputFile"

1 个答案:

答案 0 :(得分:1)

如果他们只关心你,你只能阅读中的数字。

我还强烈建议将你要分析的值提取到数组中,而不是将整行存储为字符串:

ms_time_arr=( )    # array: map repetitions to ms_time
bytes_arr=( )      # array: map repetitions to bytes

while read -r ms_time repetition bytes_back _; do
  # log to stderr to show that we read the data
  echo "At $ms_time ms, repetition $repetition, got $bytes_back back" >&2
  ms_time_arr[$repetition]=$ms_time
  bytes_arr[$repetition]=$bytes_back
done < <(grep -e 'Round' <../data/N.dat | tr -d '[[:alpha:]]')

# more logging, to show that array contents survive the loop
declare -p ms_time_arr bytes_arr

这可以通过使用tr删除所有字母字符,只留下数字,标点符号和空格。