どちらの言語にも同じ行数の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
サブシェルが生成されるのを防ぎます。