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



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

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"

如果它们只是你关心的,你可以只读进去的数字。

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

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删除所有字母字符,只留下数字、标点符号和空格来工作。

相关内容

  • 没有找到相关文章

最新更新