SSブログ

改行コードを捨てる [小技(Linux)]

 会社で、「あるテキストファイル(複数行記述されている)の改行コードを全部カットしたいんですけどー、なんかいい方法ないっすかね?」と聞かれた。彼はsedコマンドでいろいろ頑張っていたが、そういう用途には基本的にsedは不向きであることを教えて(出来ないわけじゃない)他の方法を探らせてみた。

 …というか、彼はその方法を今まさに考え中だ。(笑)

 コマンドを知っていても、その活用方法を知らなければ効果は半減する。英単語それ自体を知っていても、熟語とか慣用句、言い回しを知らなければ意味がないのと一緒だ。コマンドの「ボキャブラリー」をどれだけ増やせるかが問題なんだ!!

 というわけで、彼が(なぜか)苦しんでいる間に、ここに正解をいくつか書いてしまおう(笑)。

 なお、ここで使用するファイルは…
[root@sawako tmp]# cat /tmp/test.txt
Yui
Mio
Ritsu
Tsumugi
Azusa

 というファイルであるとする。

方法その1:trコマンド

 てか、真っ先にコレが思いつくべきじゃないかと個人的には思うんだけども。(笑)
[root@sawako tmp]# tr -d "\n" < /tmp/test.txt
YuiMioRitsuTsumugiAzusa[root@sawako tmp]#

 ファイルの一番最後の改行まで削除されてしまいコマンドプロンプトまでうしろにくっついているけどな!(大笑)


方法その2:awkコマンド

 sedを思いつくならawkも忘れないで!!(笑)
[root@sawako tmp]# awk '{printf "%s",$0}' /tmp/test.txt
YuiMioRitsuTsumugiAzusa[root@sawako tmp]#

 trコマンドと全く一緒だ。
 まあ、awkがアリだというのなら、perlでもphpでもrubyでもC/C++でもJavaでもアリじゃん…というツッコミはここでは禁止である。(笑)


方法その3:echoコマンドとcatコマンド…というか重要なのはむしろ「`」(バック・クォート)

 これはtrコマンドとかとちょっと見栄えが変わるけども、「1行にする」という命題は一応クリアするぞ!?
[root@sawako tmp]# echo `cat /tmp/test.txt`
Yui Mio Ritsu Tsumugi Azusa
[root@sawako tmp]#


 改行がスペースに変換されて並んでますな。



 さて。彼は一体どんな方法を思いつくだろうか!!!!
 若人よがんばれ!!(笑)






 まだ苦しんでるなあ。(笑)
 ぶっちゃけ、「コマンド一発」にこだわらなくてもいいんじゃないか!?

 こんなやり方でも同じ結果が得られるんだぞ!?


方法その4:ファイルを1行ずつ読み込んで「echo -n」で表示する作戦

 いや、もうこんな方法は普通取らないがな!(大笑)
[root@sawako tmp]# cat /tmp/test.txt | while read LINE; do echo -n $LINE; done
YuiMioRitsuTsumugiAzusa[root@sawako tmp]#

 英語でいうなら、「will」を「be going to」に置き換えました!みたいな感じ?(笑)

 なお、1行で書き並べていて判りにくいかもしれないので、複数行になるように清書してみるとこんな具合。
cat /tmp/test.txt | while read LINE
do
    echo -n $LINE
done


 catコマンドでファイルを表示するところ、パイプで連結されたwhile(というかreadコマンド)にファイルの内容が伝わる。
 while read LINE の行で、1行内容が変数LINEに格納される。実はすでにこの時点で改行コードは削除されている。
 while構文の中で「echo -n」コマンドを用いて変数LINEの中身を表示しているが、echoコマンドは改行コードを勝手につけてしまうので、「-n」オプションを付けてその改行コードの付与を抑止している。
 こうして1行分表示したら、while構文はファイルの終端に到達するまでぐるぐると1行づつ同じ処理を繰り返す…

 というもの。

 ほんと、「ボキャブラリ」は大事だね!!














 と、ここまで書いてたらviでファイルを開きやがった!!!!!(大爆笑)
 viでファイル開いたら負けかなと思うぞ!?
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。