佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Shell腳本學習指南之文本處理工具

Shell腳本學習指南之文本處理工具

熱門標簽:網(wǎng)站排名優(yōu)化 鐵路電話系統(tǒng) 呼叫中心市場需求 AI電銷 百度競價排名 地方門戶網(wǎng)站 服務外包 Linux服務器

4.1 排序文本

4.1.1 行的排序
未提供命令行選項時,整個記錄會根據(jù)當前l(fā)ocale所定義的次序排序。
在傳統(tǒng)的C locale中,也就是ASCII順序。

4.1.2 以字段排序
-k選項的后面接著的是一個字段編號,或者是一對數(shù)字。
每個編號后面都可以接一個點號的字符位置,或修飾符字母。

如果僅指定一個字段編號,則排序鍵值會自該字段的起始處開始,
一直繼續(xù)到記錄的結(jié)尾(而非字段的結(jié)尾)。

如果給的是一對用逗號隔開的字段數(shù)字,則排序鍵值將由第一個字段值的起始處開始,
結(jié)束于第二個字段值的結(jié)尾。使用點號表示字符位置。
-k2.4, 5.6指的是從第二個字段的第四個字符開始比較,一直比到第五個字段的第六個字符。
$ sort -t: -k1,1 /etc/passwd     以用戶名稱排序
bin:x:1:1:bin:/bin:/sbin/nologin
chico:x:12501:1000:Chico Marx:/home/chico:/bin/bash
harpo:x:12502:1000:Harpo Marx:/home/harpo:/bin/ksh
...

$ sort -t: -k3,3nr /etc/passwd     反省UID排序
或-k3nr,3或-k3,3 -n -r都可以。

4.1.3 文本塊的排序
有時需要對多行記錄組合而成的數(shù)據(jù)排序。以地址清單為例:
$ cat my-friends
# SORTKEY: Schlo, Hans Jurgen
Hans Jurgen Schlo
Unter den Linden 78
D-10117 Berlin
Germany

# SORTKEY: Jones, Adrian
...

技巧是:利用awk識別段落間隔,在每個地址內(nèi)暫時使用一個未用過的字符取代分行。
sort看到的行就會變成這樣:
# SORTKEY: Schlo, Hans Jurgen^ZHans Jurgen Schlo^ZUnter den Linden 78^Z...
cat my-friends |               讀取地址文件
     awk -v RS=" " '{ gsub("\n", "^Z"); print }' |    轉(zhuǎn)換地址為單行
          sort -f |           排序地址數(shù)據(jù),忽略大小寫
               awk -v ORS="\n\n" '{ gsub("^Z", "\n"); print }' |  恢復行結(jié)構(gòu)
                    grep -v '# SORTKEY'   刪除標記行
1. 函數(shù)gsub()為全局性替換(global substitution),類似sed下的s/x/y/g結(jié)構(gòu)。
2. RS變量時輸入數(shù)據(jù)的記錄分隔器(Record Separator)。
   通常輸入數(shù)據(jù)以換行隔開,使每行成為單個記錄。
    RS=" "是一個特殊用法,指的是記錄以空行隔開。
3. ORS是輸出記錄分隔器。
注:'{ action }'是對每個字段的操作,而RS,ORS都是對記錄的設(shè)定。

4.1.5 sort的穩(wěn)定性
sort并不穩(wěn)定。

4.2 刪除重復
sort -u是依據(jù)匹配的鍵值進行消除操作,而非匹配的記錄。
uniq有3個好用選項:
     -c在每個輸出行之前加上該行重復的次數(shù)。
     -d則用于僅顯示重復的行。
     -u僅顯示未重復的行。

4.3 重新格式化段落
fwt -w 30

4.4 計算行數(shù)、字數(shù)以及字符數(shù)
wc的默認輸出是一行報告,包括行數(shù)、字數(shù)以及字節(jié)數(shù)。
可用選項:-c(字節(jié)數(shù))、-l(行數(shù))、-w(字數(shù))。

復制代碼 代碼如下:

$ echo Testing one two three | wc -c
1 4 22
$ wc /etc/passwd /etc/group


4.6 提取開頭或結(jié)尾數(shù)行
顯示文件列表中每一個的前n條記錄:
head -n n [file(s)]
head -n [file(s)]
awk 'FNR = n' [file(s)]
sed -e nq [file(s)]
sed nq [file(s)]

觀察不斷增長的系統(tǒng)信息日志,Ctrl-C停止tail。

復制代碼 代碼如下:

$ tail -n 25 -f /var/log/messages

您可能感興趣的文章:
  • Shell腳本如何逐行處理文本文件
  • Shell文本處理三劍客之sed的使用
  • shell文件處理筆記之插入文本到文件的方法
  • 關(guān)于使用shell腳本循環(huán)處理文本的問題

標簽:黃山 湘潭 蘭州 仙桃 衡水 崇左 銅川 湖南

巨人網(wǎng)絡通訊聲明:本文標題《Shell腳本學習指南之文本處理工具》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    玉树县| 清丰县| 吉隆县| 屏东市| 景洪市| 集安市| 乌审旗| 神农架林区| 柯坪县| 西吉县| 定安县| 桂林市| 武川县| 淮阳县| 新河县| 东明县| 安岳县| 洪泽县| 大竹县| 公安县| 繁峙县| 桃江县| 新源县| 渑池县| 济南市| 巧家县| 三亚市| 岚皋县| 元氏县| 海晏县| 宕昌县| 玛纳斯县| 郴州市| 木兰县| 古浪县| 龙里县| 高安市| 盐源县| 前郭尔| 塔河县| 青岛市|