cut paste tr sort wc uniq join
awk sed 因為比較複雜,這裡不做單獨介紹
--------------------------------------------------------------------
1,cut 字元分割,處理檔案,僅作展示,不會儲存結果
-d, --delimiter=分界符使用指定分界符代替制表符作為區域分界
-f, --fields=LIST select only these fields; also print any line
cut -d (分隔符(若分隔符為空格 ‘ ’)) -f (分割後的編号)
exmaple1::顯示使用者名
# cut -d : /etc/passwd -f 1
-c, --characters=清單隻選中指定的這些字元
cut -c (字元範圍)
example2:去使用者名的2和4字元
#cut -c 2,4 /etc/passwd
其他,取值範圍
N從第1 個開始數的第N 個位元組、字元或域
N-從第N 個開始到所在行結束的所有字元、位元組或域
N-M從第N 個開始到第M 個之間(包括第M 個)的所有字元、位元組或域
-M從第1 個開始到第M 個之間(包括第M 個)的所有字元、位元組或域
---------------------------------------------------------------------
2,paste 多行合并
example3:
# more name age
::::::::::::::
name
tom
jack
lili
age
18
19
20
example4:
# paste name age
tom18
jack19
lili20
-d, --delimiters=清單改用指定清單裡的字元替代制表分隔符
example5:
[root@centos65-22 ~]# paste -d : name age
tom:18
jack:19
lili:20
-s, --serial不使用平行的行目輸出模式,而是每個檔案占用一行
[root@centos65-22 ~]# paste -s name
tomjacklili
----------------------------------------------------------------------------------
3,tr 替換、縮減和/或删除字元
examp6:
[root@centos65-22 ~]# cat mytest |tr 'a' 'A' && cat mytest
AAA bbb:ccc
ddd eee:fff
aaa bbb:ccc
tr 'a' 'A' 将小寫a轉換為大寫A
tr '()' '[]' 将小括号轉為中括号
tr '[a-z]' '[A-Z]' 小寫轉大寫
tr '\n' ' ' 換行轉空格
tr -s 'aaa' 'a' 将多個字元a轉換為一個字元a
tr -d 'aaa' 删除aaa
tr -d '[0-9]' 删除所有數字
examp7:
[root@centos65-22 ~]# cat age |tr '[0-9]' '[5-9 0-4]' && cat age
62
63
75
備注:
\NNN八進制值為NNN 的字元(1 至3 個數位)
\\反斜杠
\a終端鳴響
\b倒退
\f換頁
\n換行
\r回車
\t水準制表符
\v垂直制表符
字元1-字元2從字元1 到字元2 的升序遞增過程中經曆的所有字元
[字元*]在SET2 中适用,指定字元會被連續複制直到吻合設定1 的長度
[字元*次數]對字元執行指定次數的複制,若次數以 0 開頭則被視為八進制數
[:alnum:]所有的字母和數字
[:alpha:]所有的字母
[:blank:]所有呈水準排列的空白字元
[:cntrl:]所有的控制字元
[:digit:]所有的數字
[:graph:]所有的可列印字元,不包括空格
[:lower:]所有的小寫字母
[:print:]所有的可列印字元,包括空格
[:punct:]所有的标點字元
[:space:]所有呈水準或垂直排列的空白字元
[:upper:]所有的大寫字母
[:xdigit:]所有的十六進制數
[=字元=]所有和指定字元相等的字元
--------------------------------------------------------------------------------
4,sort 排序
-b, --ignore-leading-blanks忽略前導的空白區域
-d, --dictionary-order隻考慮空白區域和字母字元
-f, --ignore-case忽略字母大小寫
-g, --general-numeric-sort按照正常數值排序
-i, --ignore-nonprinting隻排序可列印字元
-M, --month-sort比較 (未知) < "一月" < ... < "十二月"
在LC_ALL=C 時為(unknown) < `JAN' < ... < `DEC'
-h, --human-numeric-sort 使用易讀性數字(例如: 2K 1G)
-n, --numeric-sort根據字元串數值比較
-R, --random-sort根據随機hash 排序
--random-source=檔案從指定檔案中獲得随機位元組
-r, --reverse逆序輸出排序結果
--sort=WORD按照WORD 指定的格式排序:
一般數字-g,高可讀性-h,月份-M,數字-n,
随機-R,版本-V
-V, --version-sort在文本内進行自然版本排序
其他選項:
--batch-size=NMERGE一次最多合并NMERGE 個輸入;如果輸入更多
則使用臨時檔案
-c, --check, --check=diagnose-first檢查輸入是否已排序,若已有序則不進行操作
-C, --check=quiet, --check=silent類似-c,但不報告第一個無序行
--compress-program=程式使用指定程式壓縮臨時檔案;使用該程式
的-d 參數解壓縮檔案
--files0-from=檔案從指定檔案讀取以NUL 終止的名稱,如果該檔案被
指定為"-"則從标準輸入讀檔案名
-k, --key=位置1[,位置2]在位置1 開始一個key,在位置2 終止(預設為行尾)
-m, --merge合并已排序的檔案,不再進行排序
-o, --output=檔案将結果寫入到檔案而非标準輸出
-s, --stable禁用last-resort 比較以穩定比較算法
-S, --buffer-size=大小指定主記憶體緩存大小
-t, --field-separator=分隔符使用指定的分隔符代替非空格到空格的轉換
-T, --temporary-directory=目錄使用指定目錄而非$TMPDIR 或/tmp 作為
臨時目錄,可用多個選項指定多個目錄
-u, --unique配合-c,嚴格校驗排序;不配合-c,則隻輸出一次排序結果
-z, --zero-terminated以0 位元組而非新行作為行尾标志
example8:按年齡進行排序
[root@centos65-22 ~]# paste -d : name age |sort -t ':' -k2
example9:按年齡進行排序(倒序)
[root@centos65-22 ~]# paste -d : name age |sort -t ':' -k2 -r
5,wc 統計
-c, --bytes輸出位元組數統計
-m, --chars輸出字元數統計
-l, --lines輸出行數統計
-L, --max-line-length顯示最長行的長度
-w, --words顯示單詞計數
example10:
[root@centos65-22 ~]# cat /etc/passwd |wc
29 45 1330
行數 單詞數 位元組數
6,uniq 去重複行
-c, --count在每行前加上表示相應行目出現次數的字首編号
-d, --repeated隻輸出重複的行
-D, --all-repeated[=delimit-method顯示所有重複的行
-f, --skip-fields=N比較時跳過前N 列
-i, --ignore-case在比較的時候不區分大小寫
-s, --skip-chars=N比較時跳過前N 個字元
-u, --unique隻顯示唯一的行
-z, --zero-terminated使用'\0'作為行結束符,而不是新換行
-w, --check-chars=N對每行第N 個字元以後的内容不作對照
example11:
--------------------------------------------------------------------------
7,join 連接配接文本中内容相同的行
左連接配接(left join, 左外連接配接, left outer join) 格式:join -a1 <FILE1> <FILE2>
右連接配接(right join, 右外連接配接,right outer join) 格式:join -a2 <FILE1> <FILE2>
全連接配接(full join, 全外連接配接, full outer join) 格式:join -a1 -a2 <FILE1> <FILE2>
指定分隔符:
-t <CHAR>
example12:
[root@centos65-22 ~]# more name age
1 tom
2 jack
3 lili
1 18
2 19
3 20
[root@centos65-22 ~]# join name1 age1
1 tom 18
2 jack 19
3 lili 20