2

次のような行を含むテキストファイルがあります。

    MC exp. sig-250-0 events         & $0.98 \pm 0.15$          & $3.57 \pm 0.23$              \\

sig-250-0 は、ファイルごとに変更できるものです (ただし、各ファイルの内容は常にわかっています)。この前後に行がありますが、文字列 "MC exp. sig-250-0 events" はファイル内で一意です。

特定のファイルについて、bash を使用して上記の例の 2 番目の数値 3.57 を抽出する良い方法はありますか?

4

3 に答える 3

1

より多くの行があればよかったのですが、単純な使用 awk が必要だと思います。

awk '{print $N}' $file

awk にどの種類のフィールド区切り文字を使用する必要があるかを指定しないと、スペース ' ' だけが使用されます。次に、取得したいフィールドを取得するために取得したフィールドの数を数えるだけです。あなたの場合、それは10になります。

awk '{print $10}' file.txt 
$3.57

$が欲しくないですか?awk の結果をパイプしてカットします。

awk '{print $10}' foo | cut -d $ -f2

-d は $ als フィールド区切り記号を使用し、-f は 2 番目のフィールドを選択します。

于 2013-06-03T16:14:25.850 に答える
0

常に同じ数のフィールドがあることがわかっている場合は、

#!/bin/bash
file=$1
key=$2
while read -ra f; do
    if [[ "${f[0]} ${f[1]} ${f[2]} ${f[3]}" == "MC exp. $key events" ]]; then
        echo ${f[9]}
    fi
done < "$file"
于 2013-06-03T19:27:19.740 に答える