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

ddd eee:fff


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

18

19

20



備註:

 \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

tom:18

jack:19

lili:20


example9:按年齡進行排序(倒序)

[root@centos65-22 ~]# paste -d : name age |sort -t ':' -k2 -r

lili:20

jack:19

tom:18


--------------------------------------------------------------------------------

5,wc 統計

 -c, --bytes輸出字節數統計

 -m, --chars輸出字符數統計

 -l, --lines輸出行數統計

     --files0-from=文件從指定文件讀取以NUL 終止的名稱,如果該文件被

指定爲"-"則從標準輸入讀文件名

 -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

::::::::::::::

name

::::::::::::::

1 tom

2 jack

3 lili

::::::::::::::

age

::::::::::::::

1 18

2 19

3 20


[root@centos65-22 ~]# join name1 age1

1 tom 18

2 jack 19

3 lili 20






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章