在bash中从grep输出读取数值

在bash中从grep输出读取数值,bash,Bash,我有一个文件,里面有一行行文字,我对其中的一组文字感兴趣,每一行都以同一个单词开头,每一行中有两个数字我以后要详细说明,它们总是在同一个位置,例如: Round trip time was 49.9721 milliseconds in repetition 5 tcp_ping received 128 bytes back 我在考虑尝试使用grep将需要的行捕获到一个新文件中,然后将这个新文件的内容放入一个数组中,以便在精化过程中轻松访问它,但这不起作用,有什么提示吗 #!/bin/bas

我有一个文件,里面有一行行文字,我对其中的一组文字感兴趣,每一行都以同一个单词开头,每一行中有两个数字我以后要详细说明,它们总是在同一个位置,例如:

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"
#/bin/bash
InputFile=“../data/N.dat”
grep“Round”。/data/tcp_16.out>“$InputFile”

IFS=''read-a array如果它们是您所关心的全部,那么您只能读取中的数字

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

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
ms_time_arr=()#数组:将重复映射到ms_time
bytes_arr=()#数组:将重复映射到字节
当读取-r毫秒时间重复字节返回时;做
#登录到stderr以显示我们读取了数据
echo“在$ms\u时间ms,重复$repeation,返回$bytes\u”>&2
ms_time_arr[$repeation]=$ms_time
字节数arr[$repeation]=$bytes\u back

完成<
或只是
读取一个数组<尽管现在,您只读取数组中的第一行;如果您希望每行有一个数组元素,那就是
IFS=$'\n'read-r-d'-a array
,您能为您的问题提供更好的描述吗?“从文件中获取输入”是非常模糊的。“将命令输出中的行读入数组”会更好,如果这是您真正想要的。“从grep输出中提取数值”,甚至更好……关于在bash中读取输入的全面概述,顺便说一句,请参见BashFAQ#1: