《Shell指令碼學習指南》第四章 文字處理工具

2021-08-26 16:50:16 字數 2212 閱讀 1936

4.1 排序文字

4.1.1 行的排序

未提供命令列選項時,整個記錄會根據當前locale所定義的次序排序。

在傳統的c locale中,也就是ascii順序。

4.1.2 以欄位排序

-k選項的後面接著的是乙個字段編號,或者是一對數字。

每個編號後面都可以接乙個點號的字元位置,或修飾符字母。

如果僅指定乙個字段編號,則排序鍵值會自該字段的起始處開始,

一直繼續到記錄的結尾(而非字段的結尾)。

如果給的是一對用逗號隔開的字段數字,則排序鍵值將由第乙個字段值的起始處開始,

結束於第二個字段值的結尾。使用點號表示字元位置。

-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 文字塊的排序

$ cat my-friends

# sortkey: schlo, hans jurgen

hans jurgen schlo

unter den linden 78

d-10117 berlin

germany

# sortkey: jones, adrian

...sort看到的行就會變成這樣:

# sortkey: schlo, hans jurgen^zhans jurgen schlo^zunter den linden 78^z...

cat my-friends | 讀取位址檔案

awk -v rs=" " '' | 轉換位址為單行

sort -f | 排序位址資料,忽略大小寫

awk -v ors="\n\n" '' | 恢復行結構

grep -v '# sortkey' 刪除標記行

1. 函式gsub()為全域性性替換(global substitution),類似sed下的s/x/y/g結構。

2. rs變數時輸入資料的記錄分隔器(record separator)。

通常輸入資料以換行隔開,使每行成為單個記錄。

rs=" "是乙個特殊用法,指的是記錄以空行隔開。

3. ors是輸出記錄分隔器。

注:''是對每個欄位的操作,而rs,ors都是對記錄的設定。

4.1.5 sort的穩定性

sort並不穩定。

4.2 刪除重複

sort -u是依據匹配的鍵值進行消除操作,而非匹配的記錄。

uniq有3個好用選項:

-c在每個輸出行之前加上該行重複的次數。

-d則用於僅顯示重複的行。

-u僅顯示未重複的行。

4.3 重新格式化段落

fwt -w 30

4.4 計算行數、字數以及字元數

wc的預設輸出是一行報告,包括行數、字數以及位元組數。

可用選項:-c(位元組數)、-l(行數)、-w(字數)。

$ echo testing one two three | wc -c

1 4 22

$ wc /etc/passwd /etc/group

4.6 提取開頭或結尾數行

顯示檔案列表中每乙個的前n條記錄:

head -n n [file(s)]

head -n [file(s)]

awk 'fnr <= n' [file(s)]

sed -e nq [file(s)]

sed nq [file(s)]

觀察不斷增長的系統資訊日誌,ctrl-c停止tail。

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

python學習第四章

1.建立字典 每個鍵和它的值之間用冒號隔開,項之間用逗號隔開,整個字典使用一對大括號括起來。2.字典基本操作 len d 返回d中項的數量。d k 返回關聯到鍵k上的值。d k v將值v關聯到鍵k上。del d k 刪除鍵位k的項。k in d檢查d中是否有含有鍵為k的項。3.字典的格式化字串 可以...

C Primer 學習(第四章)

1.左值和右值 c 中可以這樣簡單的理解左值和右值 能夠取位址的 有名字的就是左值,反之,不能取位址的 沒有名字的就是右值。當乙個物件被用作右值的時候,用的是物件的值 內容 當物件被用作左值的時候,用的是物件的身份 在記憶體中的位置 乙個重要的原則是在需要右值的地方可以用左值來代替,但是不能把右值當...

LinQ In Action 學習第四章

第四章開始了 linq to object 的講解 entity 用了很多linq的語法,如果linq 掌握好了entity很好學了 第四第五章 需要多加練習例子,熟練linq 的語法。第四章的例子做完了,主要講了一些常用的linq 語法。1.select select many 2.orderby...