私は現在、識別子(grepで検索)から値を分離するシェルスクリプトを作成しています。
たとえば、特定のファイルをgrepすると、次の情報が検索されます。
value1 = 1
value2 = 74
value3 = 27
情報を取得し、それを次の形式に変換するために使用できるUNIXコマンドが何であるかを知りたいです。
1 74 27
答え1
あなたはそれを使用することができますアッこのように:
grep "pattern" file.txt | awk '{printf "%s ", $3}'
用途によって異なりますが、次の目的で使用することを検討する必要がありgrep
ます。awk
grepそれ自体:
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 "
これは次の理由で機能します。
- シェル組み込み「printf」は、出力文字列で指定されたよりも多くの引数を取得すると、「自己反復」されます。
- xargsは、入力の行をprintfに渡されたコマンドラインの単語に変換します。
- cutは=を区切り文字として使用し、それに続く内容だけを渡します。
- もちろん、printf文字列は出力を表示し、明示的な新しい行は追加されないため、各文字列は前の行の末尾に追加されます。