2016-09-30 19 views
0

シェルでいくつかのタスクを実行している間にこの問題を熟考しました。シェルで垂直テキストを水平方向に変換する

H 
e 
l 
l 
o 

W 
o 
r 
l 
d 

注:任意の文字のない行にスペースが含まれており、EOL

は、どのように私は次の形式のテキストが含まれて.txtファイル[垂直方向]を変換することができます

変換する必要があります:

Hello World 

私は、次のコマンドを試してみました:cat file1.txt |tr '\n' ' ' >file2.txt

出力:

H e l l o W o r l d 

がどのように私はさらに進むことができますか?申し訳ありませんが、この質問が既に表示されている場合。もしそうなら、解決策へのリンクや回避策を教えてください。

+1

まず、 ''」「'と\ n個の\ N 'を交換し、 '\ n'を' '''に置き換えてください。 –

+0

@fedorqui手紙のない行はスペースとEOLです。問題を編集しても過言ではありません! –

答えて

1

新しい行をスペースで置き換えます。その代わり、-dでそれらを削除します。

$ echo "H 
> e 
>     # <- there is a space here 
> W 
> o" | tr -d '\n' 
He Wo 

ファイルで:ここ

tr -d '\n' < file # there is no need to `cat`! 

問題は、最後に新しい行が削除されていることなので、結果は0 - 行がファイルPOSIXlyです。あなたは非常に接近していた

+0

お返事ありがとうございます:)複数の文字列を扱うには? ..答え、あなたは 'Hello'を使用しましたが、私は上記の例についてはどうですか?.. –

+0

@LijuThomasああ、私はちょうどこれが長すぎるのを防ぐためにいくつかの文字を入れました。例をスペースで更新しました。 – fedorqui

2

... :-)
trコマンドはにオプション-dを持つ charactarクラスを削除し、代わりに単に置き換えます。
ので:

cat file1.txt | tr -d '\n' > file2.txt 

だけで行うのでしょう...

UPDATE

cat file1.txt | perl -p -i -e 's/\n(.+)/$1/' > file2.txt 
+0

クイック返信ありがとう:) :)私はコマンドを試しましたが、私が得た出力は 'HelloWorld'です。私の希望する出力は 'Hello World'ですこれは達成できますか? –

+1

@LijuThomas:そうです、申し訳ありません...私は空の行については考えていませんでした...私の答えの更新で、私はこのケースにも対処しています...-) – MarcoS

1

サンプルデータ:

echo "$x" 
H 
e 
l 
l 
o 

W 
o 
r 
l 
d 

ソリューション:

echo "$x" |sed 's/^$/bla/'|awk 'BEGIN{OFS="";ORS=" ";RS="bla"}{$1=$1}1' 
    Hello World 
0

を経てOPのコメントの後、これは空の改行を保存したバージョンでありますすべての提案と少しの研究、私は解決策を見つけたこのため、同じのためのスクリプトを書いた:

#!/bin/bash 
#Converting text to horizontal direction 

IFS='' 
while read line 
do 
    echo -n $line 
done < $1 > $2   # $1 --> file1.txt contain vertical text as mentioned in the question 
echo "$(cat $2)" 

コマンド:

$./convert.sh file1.txt file2.txt 

出力:

Hello World 
関連する問題