2つのコマンド出力を1行ずつ組み合わせる方法は? [コピー]

2つのコマンド出力を1行ずつ組み合わせる方法は? [コピー]

次の2つのコマンドがあるとしましょう。

$ cat file1
file1_a
file1_b
file1_c
file1_d

そして:

$ cat file2
file2_a
file2_b
file2_c
file2_d

カスタム区切り記号(例:)を使用して...これらの出力を結合して次の出力を取得するにはどうすればよいですか?

$ # some fancy command like { cat file1 & cat file2 } | combine --separator='...'
file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d

答え1

私はpasteコマンドを使用するのが好きです。

paste -d. file1 - - file2 < /dev/null

希望の出力を生成

file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d  

-</dev/null標準入力を参照すると、ポイント間に何も望まないので、使用するポイントを3倍にするために2回使用します。

答え2

2つのファイルがある場合はpasteタブで区切られます。したがって、タブ文字を目的の区切り文字に置き換えます。

$ paste file1 file2 | sed -e 's/\t/.../'

コンテンツにタブがある場合は、%:のように表示されない新しい区切り文字を作成します。

$ paste -d% file1 file2 | sed -e s/%/.../

答え3

これは@zacharybradyの答えですが、あなたが要求したものと似ています。入力プロセスに関する限り。延長すればいいと思います。

paste -d. <(cat file1) - - <(cat file2) < /dev/null

続行してくれた@zacharybradyに感謝します。私はjoin <(cat -n file1) <(cat -n file2) | cut -d" " -f2-これを忘れましたpaste。ただし、正しいフィールド区切り文字を取得できません。

注:pasteutf-8と互換性がないことがわかりました。それ以降の最初のバイトのみ処理するので-d破棄され-d…ます。 (私はDebian jessieを使用しています。貼り付け(GNU coreutils)8.23)

関連情報