ファイルから特定の文字列の後の整数値を取得し、すべての整数を並べ替えたい。例:文字列の重みを持つ何千行ものファイルがあります。
-weight 100
-weight 200
-weight 20
すべての整数値をソートされた順序で取得したいです。
答え1
行の最後にある最も長い数字の文字列を検索する場合は、次のようにしますgrep
。
$ grep -oP '\d+\s*$' file
100
200
20
は、行の一致する部分のみを印刷するように-o
指示し、 はPerl 互換正規表現を有効にします。PCRE では、「1 つ以上の数字」には を、「0 個以上の空白文字」には を使用できます。したがって、これらすべてを合わせると、そのコマンドは行末で見つかった最も長い数字の連続を印刷します。grep
-P
\d+
\s*
並べ替えが必要な場合は、次のように渡しますsort
:
$ grep -oP '\d+\s*$' file | sort -n
20
100
200
代わりに、特定の文字列を使用してパターンを固定する必要がある場合は、次のようにします。
$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200
は、この時点までに一致したものを含めないように\K
指示するため、上記のコマンドは、 の後の最長の数字と 0 個以上のスペースのみを出力します。grep
-weight
負の数や小数も含める場合は、次のものが必要になることに注意してください。
grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
例えば:
$ cat file
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4
$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200
答え2
これを試して:
cut -d ' ' -f2 inputfile|sort -n
-d ' '
- 区切り文字をスペースに設定する
-f2
- 2 番目の列を取得する
sort -n
- 結果を数値で並べ替える
テスト結果:
20
100
200
答え3
次の sed コマンドを試してください:
sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt | sort -n
または
sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n
テストケース:
-weight 100
-weight 200
-weight 20
結果:
20
100
200
注: 適切なテスト ケースが提供されなかったため、私は自分のテスト ケースを想定しました。
情報:
^.*weight\s([[:digit:]])
: 各行を読み、「weight」という単語の後の数字と、それに続く「スペース」をキャプチャします。| sort -n
: 出力を sort コマンドにパイプし、数値でソートします。