awk鞏固擴充套件

2021-08-29 01:50:00 字數 1944 閱讀 3951

選項-v可以實現使用外部變數。

如:a=44echo "abcd" | awk -v get_a=$a 』』,說明:-v選項用於定義引數,這裡表示將變數a的值賦予get_a。如果有多個變數需要賦值,就需要多個-v選項。

需求:把兩個檔案中,第一列相同的行合併到同一行中。舉個例子,有兩個檔案,內容如下:

cat 1.txt

1 aa

2 bb

3 ee

4 ss

cat 2.txt

1 ab

2 cd

3 ad

4 bd

5 de

合併後的結果為:

1 ab aa

2 cd bb

3 ad ee

4 bd ss

5 de

參考:awk 'nr==fnrnr>fnr' 1.txt 2.txt

解釋:nr表示讀取的行數, fnr表示讀取的當前行數,大家可以執行這個命令 awk 『』 1.txt 2.txt,比較nr和fnr。所以其實nr==fnr 就表示讀取1.txt的時候。同理nr>fnr表示讀取2.txt的時候。陣列a其實就相當於乙個map。

也可以用paste命令:paste 1.txt 2.txt。想在兩個檔案連線處用乙個指定的字元連線,還可以用-d來指定:paste -d '+' 1.txt 2.txt

參考:awk '' file%s 後記得要有一空格,否則出來就是完全連在一起的,中間連空格都沒有

也可以用其他命令:

cat file |xargs

a=cat file;echo $a

awk 'gsub(/www/,"abc")' /etc/passwd  #passwd檔案中把所有www替換為abc

awk -f ':' 'gsub(/www/,"abc",$1) ' /etc/passwd #替換$1中的www為abc

用awk指定分隔符把文字分為若干段。如何把相同段的內容弄到一行?以/etc/passwd為例,該檔案以":"作為分隔符,分為了7段。

for i in `seq 1 7`

do awk -f ':' -v a=$i '' /etc/passwd

echo

done

grep -e '123|abc' filename #找出檔案(filename)中包含123或者包含abc的行

egrep '123|abc' filename #用egrep同樣可以實現

awk '/123|abc/' filename #awk 的實現方式

需求:用awk編寫生成以下結構檔案的程式。( 最後列使用現在的時間,時間格式為yyyymmddhhmiss) 各列的值應如下所示,每增加一行便加1,共500萬行:

1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101

2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101

參考:awk 'begin'

awk語法許多與c語言是一致的,上面資料格式定義、控制語句都可以參考c。

比較繞,不用死記硬背,以後用的時候,除錯幾次就出來了。

awk 'begin' #不用脫義,就多寫幾個單引號、雙引號

awk 'begin' #用脫義,脫義的是單引號

awk 'begin' #用脫義,脫義的是雙引號

sed鞏固擴充套件

例如 有個檔案test的內容如下 ertfff abcfd 123324 444 rty fgfgf 怎麼能擷取 abcfd 到 rty 之間的內容呢?參考 sed nr abcfd rty p tets。sed單引號中命令可以有範圍匹配和指定動作,範圍可以是像1,5指定行,也可以把數字換成匹配行內...

awk擴充套件

1 使用shell變數 cat filename 1111111 13443253456 2222222 13211222122 1111111 13643543544 3333333 12341243123 2222222 12123123123 使用awk設定為 1111111 13443253...

awk命令擴充套件

awk 中使用外部shell變數 測試檔案awk.txt 及格 張三 67 不及格 李四 58 及格 小明 72 優秀 小虎 95 不及格 小蘭 49編寫指令碼awk1.sh bin bash sort n awk.txt awk f uniq 考試.txt sort awk.txt awk f u...