言語処理100本ノック2015 第2章: UNIXコマンドの基礎
はてブで50問解いた記事*1が話題になっていて、元の問題を眺めていた。第2章: UNIXコマンドの基礎ってのがあって、この章は自分でプログラムを書くのだけれど、答え合わせも兼ねてUNIXコマンドで実行しろと書いてある。ふと、はてUNIXコマンドですらすら回答できるかなとおもってUNIXコマンドでやってみた。
結果は、すらすら回答できるものもあったが、man, --helpを駆使して何とか解けるかといった感じのものもあった。
せっかくやったので、一応結果書いておく。
10. 行数のカウント
行数をカウントせよ.確認にはwcコマンドを用いよ.
$ wc -l data/hightemp.txt
11. タブをスペースに置換
タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.
$ expand -t 1 data/hightemp.txt $ cat data/hightemp.txt | tr "\t" " " $ sed -e "s/\t/ /g" data/hightemp.txt
12. 1列目をcol1.txtに,2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.
$ cut -f 1 data/hightemp.txt > col1.txt $ cut -f 2 data/hightemp.txt > col2.txt
13. col1.txtとcol2.txtをマージ
12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.
>|sh|
$ paste col1.txt col2.txt
|
14. 先頭からN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.
$ head -n 10 data/hightemp.txt
15. 末尾のN行を出力
自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.
$ tail -n 10 data/hightemp.txt
16. ファイルをN分割する
自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.
$ split --number=l/3 data/hightemp.txt
このオプションは知らなかった。
17. 1列目の文字列の異なり
1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ.
$ cut -f 1 data/hightemp.txt | sort | uniq $ cut -f 1 data/hightemp.txt | sort -u
18. 各行を3コラム目の数値の降順にソート
各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい).
$ sort -k 3r,3 data/hightemp.txt
19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる
各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ.
$ cut -f 1 data/hightemp.txt | sort | uniq -c | sort -r