《Shell脚本学习指南》第四章 文本处理工具
生活随笔
收集整理的這篇文章主要介紹了
《Shell脚本学习指南》第四章 文本处理工具
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
4.1.1 行的排序
未提供命令行選項(xiàng)時(shí),整個(gè)記錄會(huì)根據(jù)當(dāng)前l(fā)ocale所定義的次序排序。 在傳統(tǒng)的C locale中,也就是ASCII順序。
4.1.2 以字段排序
-k選項(xiàng)的后面接著的是一個(gè)字段編號(hào),或者是一對(duì)數(shù)字。 每個(gè)編號(hào)后面都可以接一個(gè)點(diǎn)號(hào)的字符位置,或修飾符字母。
如果僅指定一個(gè)字段編號(hào),則排序鍵值會(huì)自該字段的起始處開始, 一直繼續(xù)到記錄的結(jié)尾(而非字段的結(jié)尾)。
如果給的是一對(duì)用逗號(hào)隔開的字段數(shù)字,則排序鍵值將由第一個(gè)字段值的起始處開始, 結(jié)束于第二個(gè)字段值的結(jié)尾。使用點(diǎn)號(hào)表示字符位置。 -k2.4, 5.6指的是從第二個(gè)字段的第四個(gè)字符開始比較,一直比到第五個(gè)字段的第六個(gè)字符。
$ 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í)需要對(duì)多行記錄組合而成的數(shù)據(jù)排序。以地址清單為例: $ cat my-friends # SORTKEY: Schlo, Hans Jurgen Hans Jurgen Schlo Unter den Linden 78 D-10117 Berlin Germany
# SORTKEY: Jones, Adrian ...
技巧是:利用awk識(shí)別段落間隔,在每個(gè)地址內(nèi)暫時(shí)使用一個(gè)未用過的字符取代分行。 sort看到的行就會(huì)變成這樣: # 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 }' | ?恢復(fù)行結(jié)構(gòu) grep -v '# SORTKEY' ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?刪除標(biāo)記行
1. 函數(shù)gsub()為全局性替換(global substitution),類似sed下的s/x/y/g結(jié)構(gòu)。 2. RS變量時(shí)輸入數(shù)據(jù)的記錄分隔器(Record Separator)。 通常輸入數(shù)據(jù)以換行隔開,使每行成為單個(gè)記錄。 RS=" "是一個(gè)特殊用法,指的是記錄以空行隔開。
3. ORS是輸出記錄分隔器。
注:'{ action }'是對(duì)每個(gè)字段的操作,而RS,ORS都是對(duì)記錄的設(shè)定。
4.1.5 sort的穩(wěn)定性
sort并不穩(wěn)定。
4.2 刪除重復(fù)
sort -u是依據(jù)匹配的鍵值進(jìn)行消除操作,而非匹配的記錄。 uniq有3個(gè)好用選項(xiàng): -c在每個(gè)輸出行之前加上該行重復(fù)的次數(shù)。 -d則用于僅顯示重復(fù)的行。 -u僅顯示未重復(fù)的行。
4.3 重新格式化段落
fwt -w 30
4.4 計(jì)算行數(shù)、字?jǐn)?shù)以及字符數(shù)
wc的默認(rèn)輸出是一行報(bào)告,包括行數(shù)、字?jǐn)?shù)以及字節(jié)數(shù)。 可用選項(xiàng):-c(字節(jié)數(shù))、-l(行數(shù))、-w(字?jǐn)?shù))。 $ echo Testing one two three | wc -c 1 ? ? 4 ? ? 22 $ wc /etc/passwd /etc/group
4.6 提取開頭或結(jié)尾數(shù)行
顯示文件列表中每一個(gè)的前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
轉(zhuǎn)載于:https://www.cnblogs.com/xiaomaohai/archive/2012/02/11/6157869.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的《Shell脚本学习指南》第四章 文本处理工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大众cc中央后视镜前面的塑料板怎么拆怎么
- 下一篇: 安卓手机连接carplay车载(安卓手机