はじめに
面接官「ほう。得意な言語はPerlですか」
学生「はい!」
面接官「では、10000までの素数を出力してください」
学生「system "seq 2 10000 | factor | awk 'NF == 2' | cut -d: -f1"」
面接官「げぇっ シェル芸人」— ぐれさん (@grethlen) February 27, 2014
面接官「ほう。得意な言語はPerlですか」 学生「はい!」 面接官「では、10000までの素数を出力してください」 学生「system “seq 2 10000 | factor | awk ‘NF == 2’ | cut -d: -f1″」 面接官「げぇっ シェル芸人」
まあ!素敵!
あら?Perl でと出題されていますのに、シェルで解答なさっていらっしゃるようですわね。それで、面接官が「げぇっ」となってしまいましたのね!面白いですわ♪
さて、今回はこのシェル部分に注目し、各コマンドについて調べることでシェルに対する理解を深める、勉強をしたいと存じます♪
10000 までの素数を出力するシェル
seq 2 10000 | factor | awk 'NF==2{print $2}'
- seq – 単調増加 (減少) する数値列を表示する
Man page of seq - factor – 素因数分解をする
Linuxコマンド集 – 【 factor 】 素因数分解をする:ITpro - awk – テキストの置換処理に長けたスクリプト言語
Man page of GAWK ※ awk のマニュアルではないが、参考になる。 - cut – テキスト・ファイルの各行から一部分を取り出す
Linuxコマンド集 – 【 cut 】 テキスト・ファイルの各行から一部分を取り出す:ITpro ※ 上記コマンドには無いが、ツイッターでは使用していたので記述
最初に引用したツイートのシェル部分から最後の部分のみ変更しています。いろいろ調べていましたら、「cut」コマンドは「awk」コマンドを工夫することで省略できましたから。
さて、具体的に出力を確認しながら各コマンドを勉強してまいりましょう。その際、10000 までですと出力が多すぎますので、10 までの数で考えます。