区切り文字を使用して2行を1行にまとめる方法

区切り文字を使用して2行を1行にまとめる方法

次のコマンドを実行しました。

cat /proc/loadavg && date

実際の結果:

0.00 0.00 0.00 1/803 26256
Fri Aug 26 09:00:56 EEST 2016

予想される結果:

0.00 0.00 0.00 1/803 26256 @@ Fri Aug 26 09:00:56 EEST 2016

私は成功sedせずにこれを試しましたtr

cat /proc/loadavg && date | sed 's/\n/ @@ /g'

cat /proc/loadavg && date | tr '\n' ' @@ '

私が何を見逃しているのでしょうか?

答え1

最良の方法はを使用することですprintf。 2つの文字列があり、それを追加の形式で出力したいと思います。まさにprintf

$ printf "%s @@ %s\n" "$(cat /proc/loadavg)" "$(date)"

修正したtrため、試行は無効です。tr数値、言葉ではありません。ただし、これを使用して改行文字を1文字に置き換えることができます。

$ ( cat /proc/loadavg; date ) | tr '\n' '@'

...しかし、必要な機能を正しく実行できません。

sed入力から改行文字が削除されたため、あなたの試みは機能しませんsed(つまり、sed -n '/\n/p' inputfile何も印刷されません)。

最初の行の編集中に編集コマンドを使用して2番目の行を読み取った場合でも、sedこれを行うことができます。dateN〜するその間に改行文字を入れてください):

$ ( cat /proc/loadavg; date ) | sed 'N;s/\n/ @@ /'

...しかし、私は個人的にこのprintfソリューションを好みます。

答え2

次のことができます。

echo `cat /proc/loadavg` @@ `date`

答え3

このように:

( cat /proc/loadavg && date ) | sed 'N; s/\n/ @@ /'

|まず、パイプは2つのコマンドではなく動作するため、試行は機能しませんdate。この問題を解決するには、cat ... && dateサブシェルで実行し、サブシェルのstdout

tr '\n' ' @@ '1文字を複数の文字に置き換えることができないため、機能しません。

一度に1行しか表示できないため、機能しませんsed 's/\n/ @@ /g'sed改行を表示するには、2行の入力を同じバッファにマージする必要があります。これがN上記の作業です。

答え4

ただ何か他の理由で...

(cat /proc/loadavg && date) | paste -d@ - - | sed 's/@/ @@ /' 

paste -d@ - -「@」を挟んで2行を並べて貼り付けます。その後、sedは単一の「@」を「@@」に置き換えます。

関連情報