区切り記号 トリプルパイプ記号 "|||" を使用して、2 つのファイルを 1 行ずつマージします。

区切り記号 トリプルパイプ記号

どちらの言語にも同じ行数の2つの並列ファイルがあり、区切り文字を使用して2つのファイルを1行ずつマージする予定です|||。たとえば、次の2つのファイルがあります。

ファイルA:

1Mo 1,1 I love you.
1Mo 1,2 I like you.
Hi 1,3 I am hungry.
Hi 1,4 I am foolish.

ファイルB:

1Mo 1,1 Ich liebe dich.
1Mo 1,2 Ich mag dich.
Hi 1,3 Ich habe Durst.
Hi 1,4 Ich bin neu.

予想される出力は次のとおりです。

1Mo 1,1 I love you. ||| 1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. ||| 1Mo 1,2 Ich mag dich.
Hi 1,3 I am hungry. ||| Hi 1,3 Ich habe Durst.
Hi 1,4 I am foolish. ||| Hi 1,4 Ich bin neu.

paste次のコマンドを試しました。

paste -d "|||" fileA fileB

ただし、返された出力にはパイプのみが含まれます。たとえば、次のようになります。

1Mo 1,1 I love you. |1Mo 1,1 Ich liebe dich.
1Mo 1,2 I like you. |1Mo 1,2 Ich mag dich.

トライプチューブを使用して各ペアのワイヤを分離する方法はありますか|||

ベストアンサー1

そしてPOSIX 貼り付け:

:|paste -d ' ||| ' fileA - - - - fileB

pasteすべての入力ファイルの対応する行がリンクされます。ここには6つのファイル、fileA標準の4つのダミーファイル-fileB

区切り文字のリストは、スペース、3つのパイプ、およびスペースで構成され、この順序でpasteループに使用されます。

6つのファイルの最初の行の場合、fileA最初のダミーファイルがリンクされます。 (何もありません。ありがとうございます。アクションなし:演算子)、生成しますline1-fileA<space>

最初の仮想ファイルはパイプを介して2番目の仮想ファイルであるProduceに接続され、2番目の仮想ファイルは3番目の仮想ファイルであるProduceに接続され、3番目の仮想ファイルはline1-fileA |4番目の仮想ファイルであるline1-fileA ||Produceに接続されますline1-fileA |||

4番目の仮想ファイルはfileB作成されますline1-fileA ||| line1-fileB

これらのステップはすべての行に対して繰り返され、期待される結果が得られます。


入力を減らすために使用され、:|主にインタラクティブシェルで使用されます。スクリプトでは以下を使用する必要があります。

</dev/null paste -d ' ||| ' fileA - - - - fileB

サブシェルが生成されるのを防ぎます。

おすすめ記事