nameState 所泄生的輸出被接管送到 awk 程式,以便抽取出每筆紀錄。
list
root@ubuntu:/media/sf_share/sedawk_progs/sedawk2progs/ch02# cat list John Daggett, 341 King Road, Plymouth MA Alice Ford, 22 East Broadway, Richmond VA Orville Thomas, 11345 Oak Bridge Road, Tulsa OK Terry Kalkas, 402 Lans Road, Beaver Falls PA Eric Adams, 20 Post Road, Sudbury MA Hubert Sims, 328A Brook Road, Roanoke VA Amy Wilde, 334 Bayshore Pkwy, Mountain View CA Sal Carpenter, 73 6th Street, Boston MA |
nameState
s/ CA/, California/ s/ MA/, Massachusetts/ s/ OK/, Oklahoma/ s/ PA/, Pennsylvania/ s/ VA/, Virginia/ |
結果
root@ubuntu:/media/sf_share/sedawk_progs/sedawk2progs/ch02# sed -f nameState list | awk -F, '{print $4}' |
列出每一個州名,並在其後印出每一個居民的名字。
這個 shell 命令稿分成三部分
首先呼叫 awk 以產生待排序的資料,當作 sort 之輸入
再呼叫 awk 測試排序好的輸入資料,以判斷當前紀錄中的州名是否與先前的紀錄重覆
byState
#! /bin/sh awk -F, '{ print $4 ", " $0 }' $* | sort | awk -F, ' $1 == LastState { print "\t" $2 } $1 != LastState { LastState = $1 print $1 print "\t" $2 }' |
root@ubuntu:/media/sf_share/sedawk_progs/sedawk2progs/ch02# sed -f nameState list | ./byState
California
Amy Wilde
Massachusetts
Eric Adams
John Daggett
Sal Carpenter
Oklahoma
Orville Thomas
Pennsylvania
Terry Kalkas
Virginia
Alice Ford
Hubert Sims |
工作原理
root@ubuntu:/media/sf_share/sedawk_progs/sedawk2progs/ch02# sed -f nameState list | awk -F, '{print $4 ", " $0}'
Massachusetts, John Daggett, 341 King Road, Plymouth, Massachusetts
Virginia, Alice Ford, 22 East Broadway, Richmond, Virginia
Oklahoma, Orville Thomas, 11345 Oak Bridge Road, Tulsa, Oklahoma
Pennsylvania, Terry Kalkas, 402 Lans Road, Beaver Falls, Pennsylvania
Massachusetts, Eric Adams, 20 Post Road, Sudbury, Massachusetts
Virginia, Hubert Sims, 328A Brook Road, Roanoke, Virginia
California, Amy Wilde, 334 Bayshore Pkwy, Mountain View, California
Massachusetts, Sal Carpenter, 73 6th Street, Boston, Massachusetts |
預設的狀況下,程式 sort 會依字母順序排序每個輸入列,並從左到右檢視其中每個字元。
root@ubuntu:/media/sf_share/sedawk_progs/sedawk2progs/ch02# sed -f nameState list | awk -F, '{print $4 ", " $0}' | sort
California, Amy Wilde, 334 Bayshore Pkwy, Mountain View, California
Massachusetts, Eric Adams, 20 Post Road, Sudbury, Massachusetts
Massachusetts, John Daggett, 341 King Road, Plymouth, Massachusetts
Massachusetts, Sal Carpenter, 73 6th Street, Boston, Massachusetts
Oklahoma, Orville Thomas, 11345 Oak Bridge Road, Tulsa, Oklahoma
Pennsylvania, Terry Kalkas, 402 Lans Road, Beaver Falls, Pennsylvania
Virginia, Alice Ford, 22 East Broadway, Richmond, Virginia
Virginia, Hubert Sims, 328A Brook Road, Roanoke, Virginia |
為了依照州名順序重新排列紀錄,因此我們將州名加到每筆紀錄的起頭,當作排序的關鍵欄位。
配合 SVN ST
svn st | awk '{if ( $1 == "M") { print $0}}' |
No comments:
Post a Comment