LinuCレベル1 GNUとUnixのコマンド 問37
GNUとUnixのコマンド/フィルタを使ったテキストストリームの処理行数の多いファイル access.log に対して split -l 1000 access.log part_ を実行した。結果として適切なものはどれか。
当サイトのオリジナル問題(LinuCレベル1の出題範囲「GNUとUnixのコマンド」に対応。実際の試験問題ではありません)
- Aaccess.log が1000個のファイル part_aa、part_ab、… にほぼ均等な大きさで分割される
- Baccess.log が1000行ずつに分割され、part_00、part_01、… という名前で保存される
- Caccess.log が1000行ずつに分割され、part_aa、part_ab、… という名前で保存される
- Daccess.log の先頭1000行だけが part_ に書き出され、残りの行は出力されない
正解:C
解説
split はファイルを複数の小さなファイルに分割するコマンドです。-l で1ファイルあたりの行数を指定し、最後の引数は出力ファイル名の接頭辞になります。接尾辞は既定では aa、ab、ac… のようなアルファベット2文字で、-d を付けると 00、01… の数字になります。バイト数で分けるには -b、ファイルの個数で分けるには -n を使います。元のファイルは変更されず、分割したファイルは cat part_* で連結すれば元に戻せます。
選択肢ごとの解説
- A誤り。ファイルの個数を指定して分割するのは -n の働きです。-l 1000 は1ファイルあたりの行数の指定です。
- B誤り。数字の接尾辞(00、01…)になるのは -d を付けた場合で、既定ではアルファベットの接尾辞です。
- C正しい。1000行ごとに分割され、既定のアルファベット2文字の接尾辞が付いた part_aa、part_ab… が作られます。
- D誤り。split は入力の全体を分割して書き出し、残りの行を捨てることはありません。先頭だけを取り出すのは head の用途です。