識別子から数値を分離する方法

識別子から数値を分離する方法

私は現在、識別子(grepで検索)から値を分離するシェルスクリプトを作成しています。

たとえば、特定のファイルをgrepすると、次の情報が検索されます。

value1 = 1
value2 = 74
value3 = 27

情報を取得し、それを次の形式に変換するために使用できるUNIXコマンドが何であるかを知りたいです。

1 74 27

答え1

あなたはそれを使用することができますこのように:

grep "pattern" file.txt | awk '{printf "%s ", $3}'

用途によって異なりますが、次の目的で使用することを検討する必要がありgrepます。awkgrepそれ自体:

awk '/pattern/{printf "%s ", $3}' file.txt

別の方法は 噴射:

echo $(awk '/pattern/{print $3}' file.txt)

編集する:もう少し面白い方法があります。参加する値:

awk '/pattern/{print $3}' file.txt | paste -sd " " -

答え2

最初のスペースと次のスペースまですべてを削除し、改行を空白=に変換し、最後の改行を印刷します。

… | sed 's/^[^=]*= *//' | tr '\n' ' '; echo

答え3

もっと簡単なのはどうですか?

cut -d= -f2 /tmp/file | xargs printf "%s "

これは次の理由で機能します。

  1. シェル組み込み「printf」は、出力文字列で指定されたよりも多くの引数を取得すると、「自己反復」されます。
  2. xargsは、入力の行をprintfに渡されたコマンドラインの単語に変換します。
  3. cutは=を区切り文字として使用し、それに続く内容だけを渡します。
  4. もちろん、printf文字列は出力を表示し、明示的な新しい行は追加されないため、各文字列は前の行の末尾に追加されます。

関連情報