Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

Linux テキスト処理に関するコマンド-まとめ

$
0
0
はじめに はじめまして!現在DMM WEB CAMPに通わせていただいております、かいかいと申します! 最近Linuxの勉強をしておりまして、こんなコマンドがあるのか!知らなかった!! ってものが数多く存在したので、その中でもテキスト処理に関するものをまとめていこうと思います。 目次 ・wc コマンド(標準入力として受け取った値を表示する) ・sort コマンド(色々な基準で、ファイルの中身を並び替えて表示する) ・uniq コマンド(ファイル内の重複内容を取り除いて表示する) ・cut コマンド(フィールドが区切り文字で表示されているファイルで、特定のフイールドの値だけを表示させる) ・tr コマンド(文字を変換、削除する) ・tail コマンド(ファイル内の末尾を表示する) 前提条件 シェルには、bushを使用しています。 bushのバージョンは、3.2.57です。 ちなみに、bashのバージョンは、以下のコマンドで確認することができます。 $ bash --version 使用するファイル 今回、例で使用するファイルとして、以下のような内容のテキストファイルを使用します。 sample.txt aoyama aoyama takahashi takahashi aoyama katou kitagawa wcコマンド wcコマンドは、対象ファイルの行数、単語数、バイト数を表示するコマンドです。 例えば、以下のようなファイルが存在した場合には、このような表示をします。 $ wc sample.txt 7 7 56 sample.txt 左から、行数、単語数、バイト数、ファイル名を表しています。 また、オプションとして、-l,-w,-cが存在し、それぞれ行数だけ、単語数だけ、バイト数だけを表示させることができます。 よくある使い方として、-lオプションを指定することで1行に一つデータが存在するようなファイルであれば、データの総数を簡単に求めることができます。 sortコマンド 行単位で、テキストをソートすることができるコマンドです。 オプションなしで使用した場合、アルファベット順にファイル内を並び替えて表示することができます。 $ sort sample.txt aoyama aoyama aoyama katou kitagawa takahashi takahashi もともと5行目にあったaoyamaが3行目に上がっていたりと、アルファベット順に並び替えられていることがわかります。 オプションとして、 -n ・・・数値順(少ない順)に並び替えを行う。 -r ・・・逆順(降順)に並び替えを行う。 などがあります。 uniqコマンド 重複している内容の行を取り除いたりすることができるコマンドです。 $ uniq sample.txt aoyama takahashi aoyama katou kitagawa しかし、使用点に注意があります! uniqコマンドは、何もオプションをつけていない場合は、「同じ内容の行が連続している場合は取り除く。」 という性質を持っているので、今回の例では、離れているaoyamaが取り除きれていないことがわかります。 解決策として、先程のsortコマンドでアルファベット順に並び替えた後、uniqコマンドを適用することで、全ての重複行をまとめて表示させることが可能になります。 $ sort sample.txt | uniq aoyama katou kitagawa takahashi また、よく使われるオプションとして、「-c」があります。 これを使用することで、重複している行がいくつあったかを表示させることができます。 左に出ている数字が、もともと重複していた行数を表しています。 $ sort sample.txt | uniq -c 3 aoyama 1 katou 1 kitagawa 2 takahashi cutコマンド cutコマンドは、対象ファイルのフィールドを指定して、指定フィールドだけの値を取り出すことができるコマンドです。 例えば、以下のようなフィールドを「:」で区切られたファイルがあったとします。 sample2.txt aoyama1:aoyama2:aoyama3:aoyama4 katou1:katou2:katou3:katou4 satou1:satou2:satou3:satou4 このファイルの、フィールドが2番目、つまりaoyama2,katou2,satou2の部分だけを取り出して表示させたい時には、以下のようにcutコマンドを使用します。 $ cut -d <区切り文字> -f <フィールド番号> <対象ファイル名> $ cut -d : -f 2 sample2.txt aoyama2 katou2 satou2 上記のようにすると、フィールド番号が2の値だけを取り出すことができます。 今回の場合は、-dオプションで区切り文字を「:」に指定 フィールド番号は-fオプションで、「2」を指定しています。 trコマンド 文字を置換することができるコマンドです。 注意点として、文字列を置換するわけではなく「一文字単位での置換」となります。 $ tr <置換前の文字> <置換後の文字> 例えば、先程使ったsample2.txtのaをAに、tをTに置換してみます。 cat sample2.txt | tr at AT AoyAmA1:AoyAmA2:AoyAmA3:AoyAmA4 kATou1:kATou2:kATou3:kATou4 sATou1:sATou2:sATou3:sATou4 ここで注意して欲しいのは、atという文字列をATという文字列に置換しているのではなく、aをAに、tをTに別々に変換している点です。 もし文字列を置換したい場合は、別のコマンドである、awkコマンドや、sedコマンドを使用する必要があります! もう一つ、注意点なのですが、今回のtrコマンドはファイル名を以下のように直接指定して処理がうまく行かず、標準入力に対してしか処理を行うことができませんので、ご注意を! $ tr at AT sample2.txt  <=直接ファイル名を指定 #うまく行かず、下のような表示が出てしまう。 usage: tr [-Ccsu] string1 string2 tr [-Ccu] -d string1 tr [-Ccu] -s string1 tr [-Ccu] -ds string1 string2 trコマンドは、文字を置換するだけでなく、削除することもできます。 以下のように、-d オプションをつけることで、削除ができます。 $ cat sample2.txt | tr -d a oym1:oym2:oym3:oym4 ktou1:ktou2:ktou3:ktou4 stou1:stou2:stou3:stou4 また、削除文字に"\n"を指定することで、改行コードを削除し、全てのデータを一行で表示させることもできる。 $ cat sample2.txt | tr -d "\n" aoyama1:aoyama2:aoyama3:aoyama4katou1:katou2:katou3:katou4satou1:satou2:satou3:satou4 tailコマンド tailコマンドは、ファイルの末尾を表示するコマンドです。 1~15の値が行ごとに記述してあるファイルの使用すると、以下のように表示させることができます。 sample3.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 オプションをつけない場合は、末尾の10行を表示します。 $ tail sample3.txt 6 7 8 9 10 11 12 13 14 15 -n オプションを使用すると、表示させる行数を指定することができます。 また -f オプションをつけることで、リアルタイムでファイルの末尾を表示させることができます。 -f オプションは、Linuxの運用作業中などに、ログファイルを監視するのによく使われます。 終わりに 今回は、Linuxを使用する上でテキスト処理に関するコマンドの一部を紹介しました! 間違っている解釈などがございましたら、ぜひ教えていただけると幸いです。 参考文献 以下の本で勉強させてもらってます。とてもわかりやすくて、プログラミング勉強してるけどちょくちょく出てくるLinuxってなんやねん!!って人におすすめです!! 新しいLinuxの教科書-著者:三宅英明さん、大角祐介さん

Viewing all articles
Browse latest Browse all 2722

Trending Articles