今回は、ある条件でのデータの加工を通してLinuxコマンドの使い方を考えていきたいと思います。
課題は下記の様なものとなります。
【課題】
下記の内容を持つ「test.txt」ファイルがあります。
$ cat test.txt
p問題3L$%u '>? 3あ0MS+a
このファイルの内容の文字列を加工して「plumsa」という文字列を抽出する。
これに、「.goodcompany」を末尾に追加し、「plumsa.goodcompany」という文字列を作成する。
この課題を解決するにあたりLinuxコマンドの使い方を考えたところ次の様な手順で進めていくのが良いのではないかと思いました。
こちらが本記事の結論となります。
1.条件(問題)を分解して考える。
2.分解した条件(問題)をひとつづつLinuxコマンドのフィルタにかけていく。
それでは、この手順を確認していきたいと思います。
1.条件(問題)を分解して考える。
今回の問題では、下記の条件(問題)に分解できるかと思います。
①英大文字を英小文字へ変換する。
②半角スペースを削除する。
③全角スペースを削除する。
④英小文字のみを抽出する。
⑤「.goodcompany」を追加する。
2.分解した条件(問題)をひとつづつLinuxコマンドのフィルタにかけていく。
まず、フィルタに掛けていく前に、ファイルの内容を標準出力します。
$ cat test.txt
p問題3L$%u '>? 3あ0MS+a
この後、上記1で分解した条件(問題)に対してLinuxコマンドでフィルタをかけていきます。
①英大文字を英小文字へ変換する。
$ cat test.txt|tr [:upper:] [:lower:]
p問題3l$%u '>? 3あ0ms+a
②半角スペースを削除する。
$ cat test.txt|tr [:upper:] [:lower:]|sed -e 's/ //g'
p問題3l$%u'>? 3あ0ms+a
③全角スペースを削除する。
$ cat test.txt|tr [:upper:] [:lower:]|sed -e 's/ //g'|sed -e 's/ //g'
p問題3l$%u'>?3あ0ms+a
④英小文字のみを抽出する。
$ cat test.txt|tr [:upper:] [:lower:]|sed -e 's/ //g'|sed -e 's/ //g'|sed -e 's/[^a-z]//g'
plumsa
⑤「.goodcompany」を追加する。
$ cat test.txt|tr [:upper:] [:lower:]|sed -e 's/ //g'|sed -e 's/ //g'|sed -e 's/[^a-z]//g'|sed -e 's/$/.goodcompany/g'
plumsa.goodcompany
以上です!