紹介しきれなかったテキスト処理コマンドの続き。
まだまだ重要なコマンドが多いです。
この辺のコマンドは実践的にはコマンド同士を組み合わせることで効果を発揮するところも大きいですが、試験的にはまずは個々のコマンド動作を覚えるところから。
cutコマンド
cutコマンドはファイルから指定したフィールドを取り出すコマンドです。
オプションなしで実行することはできずオプションを覚えることが重要になります。
オプション
オプション | 内容 |
---|---|
-c [文字数] | 取り出す位置を指定する |
-d [区切り文字] | 区切り文字を指定する |
-f [フィールド] | 取り出すフィールドを指定する |
・サンプルファイル
コマンド実行を試す際に以下のカンマ区切りのファイルを使用します。
[wantan@localhost ~]$ cat cutfile.txt 1,2,3,4,5,6 a,b,c,d,e,f
■取り出す位置を指定する
「-c」オプションを指定する場合は区切り文字などを気にせず単純な文字数で表示します。
[wantan@localhost ~]$ cut -c 1 cutfile.txt 1 a [wantan@localhost ~]$ cut -c 2 cutfile.txt , ,
ちなみに範囲指定の場合には「-」(ハイフン)、複数指定の場合には「,」(カンマ)を使用します。
[wantan@localhost ~]$ cut -c 2-7 cutfile.txt ,2,3,4 ,b,c,d [wantan@localhost ~]$ # 複数指定 [wantan@localhost ~]$ cut -c 2,3,7 cutfile.txt ,24 ,bd
■指定列を表示する
区切り文字を指定して指定行を出力するこちらの方が実践的には使う機会は多い気もします。
[wantan@localhost ~]$ cut -d , -f 3 cutfile.txt 3 c
こちらも同様に数値の範囲指定や複数指定は可能。
pasteコマンド
pasteコマンドは複数のファイルを読み込んで水平方向につなげます。
あまり使ったとこはありません。試験的にも最低限コマンドの存在を覚えておけばいいのではないかと思います。
以下の2ファイルを対象にします。
[wantan@localhost ~]$ cat num.txt 1 2 3 4 [wantan@localhost ~]$ cat alpha.txt a b c d e
■ファイルをつなげる
[wantan@localhost ~]$ paste num.txt alpha.txt 1 a 2 b 3 c 4 d e
■区切り文字を指定する
区切り文字を指定するには「-d」オプションを指定します。
[wantan@localhost ~]$ paste -d : num.txt alpha.txt 1:a 2:b 3:c 4:d :e
trコマンド
trコマンドは標準入力の文字列の置換や削除に用いられるコマンドです。
ファイルを直接指定せず出力して指定するのがひとつのポイントです。
オプション
オプション | 内容 |
---|---|
-d | 指定した文字列を削除する |
-s | 連続したパターン文字列を1つの文字列とする |
・trコマンドのクラス
trコマンドでは特定の文字列をクラスとして指定することができます。
試験的にも出題しやすく重要です。
クラス | 内容 |
---|---|
[:alpha:] | 英字 |
[:lower:] | 英小文字 |
[:upper:] | 英大文字 |
[:digit:] | 数字 |
[:alnum:] | 英数字 |
[:space:] | スペース |
以下のファイルを題材とします。
[wantan@localhost ~]$ cat test.txt test hello ABCD hellohello 12345 wantan 0000000
■指定文字列の削除
[wantan@localhost ~]$ tr -d wantan < test.txt es hello ABCD hellohello 12345 0000000
■小文字を大文字に置き換える
[wantan@localhost ~]$ tr [:lower:] [:upper:] < test.txt TEST HELLO ABCD HELLOHELLO 12345 WANTAN 0000000
sortコマンド
行単位でファイルの内容をソートするコマンド。
やっていること自体はコマンド名通りなのでわかりやすい、オプションをしっかり覚える。
[wantan@localhost ~]$ sort sort.txt spase 000 10 2 27 55 9test oooo rt sort
オプション
デフォルトでは昇順でソートされるので、降順でソートするには「-r」オプションをつける。
reverseのr??
オプション | 内容 |
---|---|
-b | 行頭の空白を無視する |
-f | 小文字大文字の区別を無視する |
-r | 降順にソート |
-n | 数字を文字ではなく数値としてソート |
■行頭の空白を無視してソート
[wantan@localhost ~]$ sort -b sort.txt 000 098765 10 2 27 55 9test AAAAAAAA Sort abc nnnnnnn oooo rt spase
■数字を数値としてソートする
デフォルトでは行頭の1文字を文字列としてソートするため、「10」が「2」より先にきたりする。
数値としてソートする場合には「-n」オプションを使用する。
[wantan@localhost ~]$ sort -n sort.txt spase 000 AAAAAAAA Sort abc nnnnnnn oooo rt 2 9test 10 27 55 098765
splitコマンド
splitコマンドをファイルを分割するコマンド。
こちらのコマンドも実践では使用したことがないが、試験的な出題はある様子。
デフォルトでは1000行で分割する。
以下の例では「num.txt」を3行ごとにファイル分割する。
[wantan@localhost ~]$ split -3 num.txt splitnum.
なお分割されたファイルは以下のように「aa,ab,ac,・・」の形式で名前が付与されていく。
試験的には名前の命名規則は覚えておきたい。
[wantan@localhost ~]$ ll | grep split -rw-rw-r--. 1 wantan wantan 6 8月 10 05:25 splitnum.aa -rw-rw-r--. 1 wantan wantan 6 8月 10 05:25 splitnum.ab -rw-rw-r--. 1 wantan wantan 6 8月 10 05:25 splitnum.ac -rw-rw-r--. 1 wantan wantan 9 8月 10 05:25 splitnum.ad -rw-rw-r--. 1 wantan wantan 9 8月 10 05:25 splitnum.ae -rw-rw-r--. 1 wantan wantan 9 8月 10 05:25 splitnum.af -rw-rw-r--. 1 wantan wantan 6 8月 10 05:25 splitnum.ag
uniqコマンド
uniqコマンドはテキスト中の重複する行を1行にまとめて出力する。
オプションの付与によってその他の使い方もある。
実際に使用する場合にはsortコマンドと組み合わせて使用することが多いと思われる。
・元ファイル
[wantan@localhost lpic]$ cat uniq.txt 1 1 4 45 5 5 1 0
・uniqコマンド
[wantan@localhost lpic]$ uniq uniq.txt 1 4 45 5 1 0
オプション
単に重複行をまとめる以外の場合にはオプションを使用する。
オプション | 内容 |
---|---|
-d | 重複している行のみ出力 |
-u | 重複していない行のみを出力 |
■重複行のみを出力
[wantan@localhost lpic]$ uniq -d uniq.txt 1 5
■重複していない行のみ出力
[wantan@localhost lpic]$ uniq -u uniq.txt 4 45 1 0
連続していないものは重複とみなされていないので、そのような場合にはsortコマンドと組み合わせる。
試験的には組み合わせは出るかわからない。
[wantan@localhost lpic]$ sort uniq.txt | uniq -u 0 4 45
wcコマンド
標準入力やファイルの行数などをカウントするコマンド。
デフォルトで「行数 単語数 文字数」の順に表示する。
・ファイルを直接指定する
[wantan@localhost lpic]$ wc top.log 760 6878 64884 top.log
・標準入力から受け取る
[wantan@localhost lpic]$ ll | wc 9 74 480
オプション
オプションは頭文字から想像できるので比較的覚えやすい。
オプション | 内容 |
---|---|
-c | 文字数を表示 |
-w | 単語数を表示 |
-l | 行数を表示 |
xargsコマンド
xargsコマンドは標準入力から受け取った文字列を引数にしてコマンドを実行します。
使った経験がないと少し複雑に感じます。
例えば、作成したいファイル名が記述されたファイルを読み込んでファイルを生成しようとした場合、以下のようにパイプでつなぐとうまくいきません。
[wantan@localhost file]$ cat files | touch touch: ファイルオペランドがありません Try 'touch --help' for more information.
ここでxargsコマンドを用いることによって、標準入力を文字列として認識して想定通りのファイルを作成することができます。
[wantan@localhost file]$ cat files | xargs touch [wantan@localhost file]$ ll 合計 4 -rw-rw-r--. 1 wantan wantan 30 8月 10 06:45 files -rw-rw-r--. 1 wantan wantan 0 8月 10 06:45 test1.txt -rw-rw-r--. 1 wantan wantan 0 8月 10 06:45 test2.txt -rw-rw-r--. 1 wantan wantan 0 8月 10 06:45 test3.txt
試験的にはそこまで深くは問われないっぽいです。
ーーーーーーーーーーーーーーーー
・前回(第十二回)
www.wantanblog.com
・次回(第十四回)
www.wantanblog.com