思い立ったので言語処理100本ノックをやっていきます。
言語処理100本ノックhttps://t.co/hyuN21zzCJ
— いしお (@Ishitonton) 2019年6月25日
やっていき
「第2章: UNIXコマンドの基礎」をやりました。
- 利用ファイル
- 環境
- 10. 行数のカウント
- 11. タブをスペースに置換
- 12. 1列目をcol1.txtに,2列目をcol2.txtに保存
- 13. col1.txtとcol2.txtをマージ
- 14. 先頭からN行を出力
- 15. 末尾のN行を出力
- 16. ファイルをN分割する
- 17. 1列目の文字列の異なり
- 18. 各行を3コラム目の数値の降順にソート
- 19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる
利用ファイル
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
以上です。正解かはわかりません。また、次の章をやったら載せます。