LinuCレベル1 101試験の例題と解説
1.03.2フィルタを使ったテキストストリームの処理
LinuCレベル1101試験の試験範囲から、「1.03.2 フィルタを使ったテキストストリームの処理」についての例題を解いてみます。テキストファイルの重複行の操作について確認しておきましょう。
例題
以下のファイルから、重複している行を全て削除し、同一行は一行だけ表示することのできるコマンドを、すべて選択してください。
test.txt
dog
cat
pig
pig
dog
dog
- sort -u test.txt
- uniq test.txt
- sort test.txt | uniq
- cat test.txt | uniq
※この例題は実際の試験問題とは異なります。
解答と解説
正解は、「1. sort -u test.txt」と「3. sort test.txt | uniq」です。
sortコマンドは、テキストファイルの行を並び替えるコマンドです。
オプションなしで実行した場合、文字コードの順番に並び替えを行い標準出力に結果を表示します。
sortコマンドには、並び替えに関するオプションなどを含む様々なオプションがあります。
-b, | --ignore-leading-blanks | 先頭の空白を無視して並び替える |
-f, | --ignore-case | 大文字小文字区別せずに並び替える |
-n, | --numeric-sort | 文字列を数値と見なして並べ替える |
-o, | --output=FILE | 結果を出力するファイル名を指定する |
-u, | --unique | 同一行は1つ目だけを出力する |
uniqコマンドは、繰り返し行の出力や削除を行うコマンドです。
オプションなしで実行した場合、連続する同じ行が最初に見つけた行にまとめられます。uniqコマンドは、連続する行の比較を行うため、重複する行が離れた場所にある場合、取り除くことはできません。
選択肢の解説は以下です。
1. sort -u test.txt
正解です。
sortコマンドに-uオプションを指定することで、テキストファイルの並び替えを行い、重複している行の削除を行います。
そのため、同一行は一行だけ出力することができます。
実行結果は以下の通りです。
$ sort -u test.txt
cat
dog
pig
よって正解となります。
2. uniq test.txt
誤りです。
uniqコマンドは、連続する行の比較を行うため、離れた行にある重複行は取り除くことができません。
そのため、例題のtest.txtの場合、離れた場所にある「dog」が2行出力されます。
実行結果は以下の通りです。
$ uniq test.txt
dog
cat
pig
dog
よって不正解となります。
3. sort test.txt | uniq
正解です。
この選択肢のコマンドでは、パイプ(|) を用いてsortコマンドの結果を、uniqコマンドで実行しています。
先にテキストファイルをsortコマンドで並び替えることで、以下のように重複した行が連続するようになります。
$ sort test.txt
cat
dog
dog
dog
pig
pig
この並び替えた結果を、パイプ(|) を用いてuniqコマンドに渡すことで、重複行を全て削除し出力することができます。
実行結果は以下の通りです。
$ sort test.txt | uniq
cat
dog
pig
よって正解となります。
4. cat test.txt | uniq
誤りです。
catコマンドは、ファイルの中身を標準出力に出力するコマンドです。
ファイルの中身をそのまま、uniqコマンドに渡しているため離れた行にある「dog」を取り除くことができません。
実行結果は以下の通りです。
$ cat test.txt | uniq
dog
cat
pig
dog
よって不正解となります。
重複行の削除や並び替えは、ユーザ情報や会社情報など、業務内で取り扱うようなファイルに対しても便利に利用することができます。実際に、実行してみることで動きを確認し利用できるようにしておきましょう。
例題作成者
株式会社デージーネット OSS研究室 橋本知里