天天看點

linux下文本處理

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

繼續閱讀