数字の一覧を sort したら 10、100、9、9 の順になった
数字の順にならへんの?
【疑問】sort したら 10 が 9 より前に来た。sort・uniq・cut・paste・tr【LPICレベル1】
前提のおさらい。head・tail は先頭と末尾、wc は「行数 単語数 バイト数」を出す。パイプでつないで使う
>>1
sort は既定では文字として比べるから、1文字目の 1 が 9 より小さくて 10 が先に来る。数として比べるなら -nsort -n → 9、9、10、100sort -nr → 100、10、9、9(-r で逆順)
>>3
ほかのオプション-u 重複を1つに-t : 区切り文字-k 3 3番目の欄で並べる(-k 3,3 でその欄だけ)-f 大文字小文字を区別しない
>>4user1:x:1001:sales みたいな行で試したsort -t: -k3 -n → 1000、1001、1002 の順sort -t: -k4,4 -k3,3nr → 4欄目で並べて、同じものの中は3欄目の数の大きい順
>>3
並び順はロケールでも変わる。sort の man に「LC_ALL=C にするとバイトの値の昔ながらの順になる」と書いてある
uniq で重複を消したのに、まだ同じ行が残ってる
>>7
uniq は隣り合った同じ行しかまとめない。apple・apple・banana・apple を uniq -c すると 2 apple、1 banana、1 apple になる。先に sort する
>>8sort f | uniq -c → 3 apple、1 banana。-d は重複した行だけ、-u は1回だけの行だけ
>>1
列を取り出すのは?
>>10cut。-d で区切り、-f で欄、-c で文字の位置cut -d: -f1,3 p → user1:1001cut -c1-5 p → user1
区切りを指定しないとタブ区切り
>>11
逆にくっつけるのが paste。2つのファイルの行を横に並べる(既定はタブ)paste c1 c2 → a(タブ)1、b(タブ)2paste -d, c1 c2 → a,1、b,2paste -s c1 → 1つのファイルの行を横1行に
>>1
tr は?
>>13
文字の置き換え・削除・まとめ。標準入力しか読まないから、ファイル名を渡すと extra operand で怒られるtr a-z A-Z 小文字を大文字にtr -d 0-9 数字を消すtr -s , 続いた , を1つに
>>14tr a-z A-Z < file か cat file | tr … で渡すんやな
>>8
数字は sort -n、uniq の前に sort、tr は標準入力だけ。3つともひっかけで出そう
管理人のひとこと
- sort は既定で文字として比べる。
-n数値、-r逆順、-u重複を1つ、-t区切り、-k欄(-k3,3でその欄だけ)、-f大小文字を区別しない。並び順はロケールでも変わる(LC_ALL=C でバイト順)。 - uniq は隣り合った同じ行だけをまとめるので、先に sort する。
-c回数、-d重複した行、-u1回だけの行。 - cut は
-d区切り・-f欄・-c文字位置(既定はタブ区切り)。paste は行を横に並べる(-d区切り、-s1ファイルを1行に)。 - tr は標準入力だけを読み、文字を置き換える(
-d削除、-s連続をまとめる)。