2016-08-29 7 views
1

次のコードを使用して、ヘッダー "Both"と空白行をファイルの先頭に追加しています。スクリプトで改行(/ n)を認識できない貼り付けコマンド

sed -i '1i Both \n' file1 

ファイルを開くと、改行が表示されます。

ただし、次のコマンドを使用してファイルを貼り付けると、シェルの改行が削除されます。

paste file1 file2 | column -s $'\t' -t | sed '1i\\' 

これが貼り付けによって認識されない理由は誰にもわかりますか?

より具体的には、/ n文字は認識されていますが、貼り付けによって改行が削除されます(同じ行にある場合)。

:私は一つだけのファイルに新しい行を付加する場合、それはこのようになりますので、それは改行を削除知っ

Header1  Header2 

abc   def 
ghi   jkl 

Header1  Header2 
abc   def 
ghi   jkl 

どうあるべきか:何が出力されています

Header1  Header2    
      def 
abc   jkl 
ghi 

一時的な回避策として、私はsed -i '1i Both \n----' file1を使用してペーストをpに強制しますRINTそれが空ではないので、新しい行:

Header1  Header2 
----  ----   
abc   def 
ghi   jkl 

そして、どのように私はすべての方法一緒に2つのファイルを貼り付ける際にまたがった行に新しい行を保存することができ、それは改行を続けるので、私は推測?

+0

あなたはあなたが得ているものと期待したものを投稿できますか? –

+1

ちょっと詳しく説明しました。 – DomainsFeatured

+0

その間、私は 'sed -i '1i Both \ n ----''を使っています。これは空ではないので、新しい行を認識させ、ヘッダとデータの間に仕切りを与えます。 – DomainsFeatured

答えて

1

ここにsedの必要はありません。お守り:あなたがすべてで出力をファイルにリダイレクトされていない場合

# defining functions here to make this a standalone reproducer 
# remove these and change <(file1) to just file1 to use files instead 
file1() { printf '%s\n' Header1 abc ghi; } 
file2() { printf '%s\n' Header2 def jkl; } 

# use braces to create a code block, and redirect that whole block to your output file 
{ 
    printf '%s\n' Both ''      # header, then blank line 
    paste <(file1) <(file2) | column -s $'\t' -t # body content 
} >out.txt          # redirection 

...明らかに、あなたはリダイレクト、またブロックを必要としません。これはさらに効率的です。columnの出力を読み取ってからsedによって書き込む必要はありません。

関連する問題