For Your ISHIO Blog

データ分析や機械学習やスクラムや組織とか、色々つぶやくブログです。

言語処理100本ノック - 第2章: UNIXコマンドの基礎

思い立ったので言語処理100本ノックをやっていきます。

www.cl.ecei.tohoku.ac.jp

「第2章: UNIXコマンドの基礎」をやりました。

利用ファイル

hightemp.txtは、日本の最高気温の記録を「都道府県」「地点」「℃」「日」のタブ区切り形式で格納したファイルである。以下の処理を行うプログラムを作成し、hightemp.txtを入力ファイルとして実行せよ。さらに、同様の処理をUNIXコマンドでも実行し。プログラムの実行結果を確認せよ。

ファイルの中身は以下の通りです。

$ cat hightemp.txt 
高知県  江川崎  41      2013-08-12
埼玉県  熊谷    40.9    2007-08-16
岐阜県  多治見  40.9    2007-08-16
山形県  山形    40.8    1933-07-25
山梨県  甲府    40.7    2013-08-10
和歌山県        かつらぎ        40.6    1994-08-08
静岡県  天竜    40.6    1994-08-04
山梨県  勝沼    40.5    2013-08-10
埼玉県  越谷    40.4    2007-08-16
群馬県  館林    40.3    2007-08-16
群馬県  上里見  40.3    1998-07-04
愛知県  愛西    40.3    1994-08-05
千葉県  牛久    40.2    2004-07-20
静岡県  佐久間  40.2    2001-07-24
愛媛県  宇和島  40.2    1927-07-22
山形県  酒田    40.1    1978-08-03
岐阜県  美濃    40      2007-08-16
群馬県  前橋    40      2001-07-24
千葉県  茂原    39.9    2013-08-11
埼玉県  鳩山    39.9    1997-07-05
大阪府  豊中    39.9    1994-08-08
山梨県  大月    39.9    1990-07-19
山形県  鶴岡    39.9    1978-08-03
愛知県  名古屋  39.9    1942-08-02

環境

10. 行数のカウント

行数をカウントせよ.確認にはwcコマンドを用いよ.

# コマンドラインで実行してください。
wget http://www.cl.ecei.tohoku.ac.jp/nlp100/data/hightemp.txt
wc -l hightemp.txt

11. タブをスペースに置換

タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.

# コマンドラインで実行してください。
# sedコマンドを利用する場合
cat hightemp.txt | sed s/"\t"/" "/g

# trコマンドを利用する場合
cat hightemp.txt | tr "\t" " "

# expandコマンドを利用する場合
expand hightemp.txt -t 1

# 参考
# sedコマンド: https://www.atmarkit.co.jp/ait/articles/1610/17/news015.html
# trコマンド: https://www.atmarkit.co.jp/ait/articles/1610/03/news017.html
# expandコマンド: https://www.atmarkit.co.jp/ait/articles/1611/02/news023.html

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.

# コマンドラインで実行してください。
cut -f 1 hightemp.txt > col1.txt
cut -f 2 hightemp.txt > col2.txt

# 参考
# cutコマンド: https://www.atmarkit.co.jp/ait/articles/1610/31/news026.html

13. col1.txtとcol2.txtをマージ

12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.

# コマンドラインで実行してください。
paste col1.txt col2.txt > paste.txt

# 参考
# pasteコマンド: https://www.atmarkit.co.jp/ait/articles/1704/07/news018.html

14. 先頭からN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.

# コマンドラインで実行してください。
N=5
head -n $N hightemp.txt

# 参考
# headコマンド: https://www.atmarkit.co.jp/ait/articles/1603/07/news023.html

15. 末尾のN行を出力

自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ.

# コマンドラインで実行してください。
N=5
tail -n $N hightemp.txt

# 参考
# tailコマンド: https://www.atmarkit.co.jp/ait/articles/1603/07/news023.html

16. ファイルをN分割する

自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ.

# コマンドラインで実行してください。
N=5
split -l $N hightemp.txt

# 参考
# splitコマンド: https://www.atmarkit.co.jp/ait/articles/1711/24/news016.html

17. 1列目の文字列の異なり

1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ.

# コマンドラインで実行してください。
# cutとsortを利用する場合
cut -f 1 hightemp.txt | sort -u

# cutとsortとuniqを利用する場合
cut -f 1 hightemp.txt | sort | uniq

# 参考
# sortコマンド: https://www.atmarkit.co.jp/ait/articles/1611/09/news020.html
# uniqコマンド: https://www.atmarkit.co.jp/ait/articles/1611/14/news021.html

18. 各行を3コラム目の数値の降順にソート

各行を3コラム目の数値の逆順で整列せよ(注意: 各行の内容は変更せずに並び替えよ).確認にはsortコマンドを用いよ(この問題はコマンドで実行した時の結果と合わなくてもよい).

# コマンドラインで実行してください。
cat hightemp.txt | sort -k 3 -r

19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる

各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ.

# コマンドラインで実行してください。
cut -f 1 hightemp.txt | sort | uniq -c | sort -r

以上です。正解かはわかりません。また、次の章をやったら載せます。