コマンドを使用してファイルをリンクするのに奇妙な問題がありますcat
。それぞれ文字列を含む2つのファイルがあります。
ファイル1:
ABC
ファイル2:
DEF
私がそうでなければcat file1 file2
そうですcat file1 >> file2
。出力は次のようになると予想されます。
ABC
DEF
しかし、以下のような興味深い結果が出ました。
ABCDEF
ファイルを確認してみると、余分なスペースや文字がありません。ところで、文字列の後ろから手動で削除すると、1文字も表示されません。良い結果。私は私が見ることができないどんな種類の「隠された」文字やセリフもあると思いました。
接続しなければならないファイルが多すぎて面倒でした。手動で同じ操作を実行することはできません。
助けてくれてありがとう。
ベストアンサー1
paste
おそらく最も単純な(とても効率的なことは言うまでもありません)この問題を解決できることを意味します。
printf abc >file1
printf def >file2
paste -sd\\n file[12]
abc
def
paste
順番に呼び出されると、名前付き-s
の各入力ファイルを順番に読み取り、paste
<tab>または指定された区切り文字列内の各ファイルの各行の出力を読み取ります-d
。paste
名前付き各 infile の出力は常に ewline で終わるのに対し、\n
ここの-d
区切り文字も\n
ewline で指定されるのでデフォルトではインポートしてcat
エクスポートしますが、各ファイルは常に\n
ewline で終わります。
Peterが以下に指摘したように、空のファイルによって追加の改行paste
が\n
発生する可能性があります。これが問題であれば、実際にも同じsed
アプローチを適用できます。いいえこの方法:
: > file0
sed '' file[012]
abc
def
しかし、今この方法を使うとsed
(少なくともGNU)他の問題がある可能性があります。どんなsed
願いでもいつも別の行をインポートする前にewlineを作成してください\n
。しかし、非常にリンクされた入力ファイルの完全なシリーズの最後の行とそれに続くいくつかのsed
s(例:GNU)可能いいえ最後に改行文字を追加します。たとえば、私の入力ファイルの場合定義その後に改行文字はありません。
そして、それ質問ですね…
sed '' file[012] | paste -sd\\n
...上記のパイプラインはおそらくすべての基盤をカバーします。