2016-05-19 14 views
1

ファイルの行がテキストで埋め込まれています。私はこれらのグループについて興味があります。各行は同じ単語で始まり、各行に2つの数字があります。後に、彼らは例えば、常に同じ位置にある:私は行をつかむためにはgrepを使用しようと考えていたbashのgrep出力から数値を読み取る

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

はにこの新しいファイルの内容を入れた後、新しいファイルに望んでいた、と配列、簡単に熟考の間にそれにアクセスするが、これは動作していない、任意のヒント?

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

'<<<" $ InputFile "はここの文字列です。通常のリダイレクション( '<" $ InputFile "')が必要です。 –

+0

'-a array <<(grep ...)'を読んでください。一時ファイルはまったくありません。 –

+0

今は、配列の最初の行だけを読み込んでいます。 'IFS = $ '\ n'を読んで-r -d '-a配列' –

答えて

1

彼らはあなたが気にすべてのなら、あなたは数字のみを読むことができます。

私も強く、のようなので、あなたは配列に分析することになるだろう値を抽出することをお勧めしたいですむしろ文字列としてフルラインを保存するより:これは数字、句読点や空白を残して、すべてのアルファベット文字を削除するにはtrを使用して動作

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 

関連する問題