日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle随机日期没有斜杠,收集awk的一些技巧,放到这里以方便今后查阅

發布時間:2024/9/19 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle随机日期没有斜杠,收集awk的一些技巧,放到这里以方便今后查阅 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

awk 用法:awk ' pattern {action} '

變量名 含義

ARGC 命令行變元個數

ARGV 命令行變元數組

FILENAME 當前輸入文件名

FNR 當前文件中的記錄號

FS 輸入域分隔符,默認為一個空格

RS 輸入記錄分隔符

NF 當前記錄里域個數

NR 到目前為止記錄數

OFS 輸出域分隔符

ORS 輸出記錄分隔符

1、awk '/101/' file 顯示文件file中包含101的匹配行。

awk '/101/,/105/' file

awk '$1 == 5' file

awk '$1 == "CT"' file 注意必須帶雙引號

awk '$1 * $2 >100 ' file

awk '$2 >5 && $2<=15' file

2、awk '{print NR,NF,$1,$NF,}' file 顯示文件file的當前記錄號、域數和每一行的第一個和最后一個域。

awk '/101/ {print $1,$2 + 10}' file 顯示文件file的匹配行的第一、二個域加10。

awk '/101/ {print $1$2}' file

awk '/101/ {print $1 $2}' file 顯示文件file的匹配行的第一、二個域,但顯示時域中間沒有分隔符。

3、df | awk '$4>1000000 ' 通過管道符獲得輸入,如:顯示第4個域滿足條件的行。

4、awk -F "|" '{print $1}' file 按照新的分隔符“|”進行操作。

awk 'BEGIN { FS="[: \t|]" }

{print $1,$2,$3}' file 通過設置輸入分隔符(FS="[: \t|]")修改輸入分隔符。

Sep="|"

awk -F $Sep '{print $1}' file 按照環境變量Sep的值做為分隔符。

awk -F '[ :\t|]' '{print $1}' file 按照正則表達式的值做為分隔符,這里代表空格、:、TAB、|同時做為分隔符。

awk -F '[][]' '{print $1}' file 按照正則表達式的值做為分隔符,這里代表[、]

5、awk -f awkfile file 通過文件awkfile的內容依次進行控制。

cat awkfile

/101/{print "\047 Hello! \047"} --遇到匹配行以后打印 ' Hello! '.\047代表單引號。

{print $1,$2} --因為沒有模式控制,打印每一行的前兩個域。

6、awk '$1 ~ /101/ {print $1}' file 顯示文件中第一個域匹配101的行(記錄)。

7、awk 'BEGIN { OFS="%"}

{print $1,$2}' file 通過設置輸出分隔符(OFS="%")修改輸出格式。

8、awk 'BEGIN { max=100 ;print "max=" max} BEGIN 表示在處理任意行之前進行的操作。

{max=($1 >max ?$1:max); print $1,"Now max is "max}' file 取得文件第一個域的最大值。

(表達式1?表達式2:表達式3 相當于:

if (表達式1)

表達式2

else

表達式3

awk '{print ($1>4 ? "high "$1: "low "$1)}' file

9、awk '$1 * $2 >100 {print $1}' file 顯示文件中第一個域匹配101的行(記錄)。

10、awk '{$1 == 'Chi' {$3 = 'China'; print}' file 找到匹配行后先將第3個域替換后再顯示該行(記錄)。

awk '{$7 %= 3; print $7}' file 將第7域被3除,并將余數賦給第7域再打印。

11、awk '/tom/ {wage=$2+$3; printf wage}' file 找到匹配行后為變量wage賦值并打印該變量。

12、awk '/tom/ {count++;}

END {print "tom was found "count" times"}' file END表示在所有輸入行處理完后進行處理。

13、awk 'gsub(/\$/,"");gsub(/,/,""); cost+=$4;

END {print "The total is $" cost>"filename"}' file gsub函數用空串替換$和,再將結果輸出到filename中。

1 2 3 $1,200.00

1 2 3 $2,300.00

1 2 3 $4,000.00

awk '{gsub(/\$/,"");gsub(/,/,"");

if ($4>1000&&$4<2000) c1+=$4;

else if ($4>2000&&$4<3000) c2+=$4;

else if ($4>3000&&$4<4000) c3+=$4;

else c4+=$4; }

END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file

通過if和else if完成條件語句

awk '{gsub(/\$/,"");gsub(/,/,"");

if ($4>3000&&$4<4000) exit;

else c4+=$4; }

END {printf "c1=[%d];c2=[%d];c3=[%d];c4=[%d]\n",c1,c2,c3,c4}"' file

通過exit在某條件時退出,但是仍執行END操作。

awk '{gsub(/\$/,"");gsub(/,/,"");

if ($4>3000) next;

else c4+=$4; }

END {printf "c4=[%d]\n",c4}"' file

通過next在某條件時跳過該行,對下一行執行操作。

14、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall 把file1、file2、file3的文件內容全部寫到fileall中,格式為

打印文件并前置文件名。

15、awk ' $1!=previous { close(previous); previous=$1 }

{print substr($0,index($0," ") +1)>$1}' fileall 把合并后的文件重新分拆為3個文件。并與原文件一致。

16、awk 'BEGIN {"date"|getline d; print d}' 通過管道把date的執行結果送給getline,并賦給變量d,然后打印。

17、awk 'BEGIN {system("echo \"Input your name:\\c\""); getline d;print "\nYour name is",d,"\b!\n"}'

通過getline命令交互輸入name,并顯示出來。

awk 'BEGIN {FS=":"; while(getline< "/etc/passwd" >0) { if($1~"050[0-9]_") print $1}}'

打印/etc/passwd文件中用戶名包含050x_的用戶名。

18、awk '{ i=1;while(i awk '{ for(i=1;i type file|awk -F "/" '

{ for(i=1;i { if(i==NF-1) { printf "%s",$i }

else { printf "%s/",$i } }}' 顯示一個文件的全路徑。

用for和if顯示日期

awk 'BEGIN {

for(j=1;j<=12;j++)

{ flag=0;

printf "\n%d月份\n",j;

for(i=1;i<=31;i++)

{

if (j==2&&i>28) flag=1;

if ((j==4||j==6||j==9||j==11)&&i>30) flag=1;

if (flag==0) {printf "%02d%02d ",j,i}

}

}

}'

19、在awk中調用系統變量必須用單引號,如果是雙引號,則表示字符串

Flag=abcd

awk '{print '$Flag'}' 結果為abcd

awk '{print "$Flag"}' 結果為$Flag

1、刪除重復的行

#awk '!a[]++'

2、將數據文件中的每個詞的第一個字母變成大寫

cat test

linux is long live!!!

i am a cuer

awk ',1,1); sub(/^./,toupper(first),); print }' test

Linux is long live!!!

I am a cuer

3.awk 范例

a.顯示文件第3和5行: awk 'NR==3 || NR ==5 ' /etc/passwd

b.打印前3行和7行以后的: awk 'NR<4 || NR> 7 {print $1}' /etc/passwd

c.打印以root和nobody開始的記錄: awk '/^(root|nobody)/' /etc/passwd

d.如果記錄以r或p或rp開頭,就打印這個記錄: awk '/^[rp]/' /etc/passwd

e.顯示1-3和5-7行的信息

#awk '(NR<4 && NR>0) || (NR>4 && NR<8) {print}' /etc/passwd

4.含有root的列

#gawk? 'BEGIN{FS=":" ;sum=0} $1 == "root" {sum=sum+1} END {print sum}' passwd

5.把合在一起的數字漢字用空格分開。

#sed 's/^[ ]*//;s/^[0-9]*/& /'? file

#awk '{gsub(/[^0-9]+/,"",$1);print $1}' file

6.統計一列數的總數和平均值。

#awk '{sum +=$2} END{print "sum:" sum}' test.txt

#awk '{sum +=$2} END{print "sum:" sum/NR}' test.txt

7.?指定如果零個或一個字符或擴展正則表達式的具體值在字符串中,則字符串匹配

#awk '/smith?/' file

8.顯示包含abc或123的字符串

#awk '/abc|123/' file

9.將具有字符串ae或alle或anne或allnne的所有記錄打印至標準輸出

#awk '/a(ll)?(nn)?e/' file

10.{m}指定如果正好有m個模式的具體值位于字符串中,則字符串匹配.下面顯示只包含兩個l的字符串

#awk? '/l{2}/'? file

11.{m,}指定如果至少m個模式的具體值在字符串中,則字符串匹配,下面顯示至少包含兩個t的字符串

#awk '/t{2,}/'? file

12.{m, n}指定如果 m 和 n 之間(包含的 m 和 n)個模式的具體值在字符串中(其中m<= n),則字符串匹配,下面顯示包含1和2個er的字符串

#awk '/er{1,2}/' file

13.將具有zxm后跟以字母順序從 a 到 h 排列的任何字符的所有記錄打印至標準輸出

#awk '/zxm[a-h]/'? file

14.[^String]在[ ]和在指定字符串開頭的^指明正則表達式與方括號內的任何字符不匹配

#awk '/sm[^a-h]/' file

15. ~或!~表示指定變量與正則表達式匹配或不匹配的條件語句

#awk? '$1 ~ /n/' file

16.將把字符 h 作為第二個字段的第一個字符和最后一個字符的所有記錄打印至標準輸出

#awk? '$2 ~ /^h/'? file

#awk? '$2 ~ /h$/'? file

17.將具有以兩個字符隔開的字符 a 和 e 的所有記錄打印至標準輸出

#awk? '/a..e/' file

18.將具有以零個或更多字符隔開的字符 a 和 e 打印至標準輸出

#awk? '/a*e/' file

19.awk 命令識別大多數用于 C 語言約定中的轉義序列,以及 awk 命令本身用作特殊字符的幾個轉義序列。轉義序列是:

轉義序列表示的字符

\"\"(雙引號)

\//(斜杠)字符

\ddd其編碼由 1、2 或 3 位八進制整數表示的字符,其中 d 表示一個八進制數位

(反斜杠) 字符

\a警告字符

\b退格字符

\f換頁字符

\n換行字符

\r回車字符

\t跳格字符

\v垂直跳格

20.要顯示長于 72 個字符的文件的行,請輸入:

awk 'length($0) >72' file

21.要顯示字start和stop之間的所有行,包含“start”和“stop”,請輸入:

awk '/start/,/stop/' file

22.在屏幕上打印”What is your name?",并等待用戶應答。當一行輸入完畢后,getline函數從終端接收該行輸入,并把它儲存在自定義變量name中。如果第一個域匹配變量name的值,print函數就被執行,END塊打印See you和name的值

#awk 'BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test

23.awk將逐行讀取文件/etc/passwd的內容,在到達文件末尾前,計數器lc一直增加,當到末尾時,打印lc的值

#awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'

24.system函數可以在awk中執行linux的命令。如:

#awk 'BEGIN{system("clear")'

25.如果第一個域小于第二個域則打印

#awk '{if ($1

26.變量的初始值為1,若i小于可等于NF(記錄中域的個數),則執行打印語句,且i增加1。直到i的值大于NF.

# awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test

# awk '{for (i = 1; i27.將一個文件的總行數顯示出來

#gawk '{nlines++} END {print nlines}'? file

28.顯示擁有至少一個字段的所有行。這是一個簡單的方法,將一個文件里的所有空白行刪除

#gawk 'NF > 0'? file

29.此程序會顯示出范圍是0 到100 之間的7 個隨機數

#gawk 'BEGIN {for (i = 1; i <= 7; i++) print int(101 * rand())}'

30.此程序會顯示出所有指定的文件的總字節數

#ls -l files | gawk '{x += $4}; END {print "total bytes: " x}'

31.此程序會將指定文件里最長一行的長度顯示出來。expand 會將tab 改成space,所以是用實際的右邊界來做長度的比較。

#expand file | gawk '{if (x < length()) x = length()} END {print "maximum line length is " x}'

32.顯示所有只有四個字符的字段

#awk 'length($1)==4{print $1}'? file

33.顯示所有以一個C或E開頭的字段

$ awk -F"[: ]" '$1~/^C|E/{print $1}' datafile

34.在文件的第一行前插入一行

#awk 'BEGIN {print "new line"} {print $0}' file >file1

35.在文件末尾添加一行

#awk 'END {print "THE END"} {print $0}' file >file1

36.awk和cut的相同用法

#awk -F: '{print $1,$2,$3}' file

#cut -d: -f2,3,4,5? file

#cut? -c 1-5 /etc/passwd?顯示文件中的前1-5個字符

37.以@或:為分隔符的文件

awk -F[@:] '{print $1}' file

38.結果以$分隔

awk 'BEGIN{FS=":"} {OFS="$"} {if($1~/Mike/) print "",$3,$4,$5}' love

39.把一行豎排的數據轉換成橫排

awk '{printf("%s,",$1)}' a.txt

awk '{printf ("%s\n",$0)}' a.txt

40.systime函數返回從1970年1月1日開始到當前時間(不計閏年)的整秒數

awk '{ now = systime(); print now }'

awk '{ now=strftime( "%D", systime() ); print now }'

awk '{ now=strftime("%m/%d/%y"); print now }'

41.將時間戳轉成日值的awk方法

echo "1180051515"|awk '{print strftime("%F %T",$0)}'

42.打印輸入記錄的最后一個字段

awk -F/ '{print $NF}' a.txt

43.打印輸入記錄的第2個字段

awk '{x=2;print $x}' a.txt

44.顯示文件a.txt的當前記錄號、域數和每一行的第一個和最后一個域和文件名

awk '{print NR,NF,$1,$NF,FILENAME}'? a.txt

45.在awk中調用系統變量必須用單引號,如果是雙引號,則表示字符串

Flag=abcd

awk ‘{print ‘$Flag’}’ 結果為abcd

awk ‘{print “$Flag”}’ 結果為$Flag

46.把三個文件的內容追加到一個文件里

awk '{print FILENAME,$0}' a b c >all

47.通過管道把date的執行結果送給getline,并賦給變量d,然后打印。

awk 'BEGIN {"date"|getline d; print d}'

48.通過getline命令交互輸入name,并顯示出來:

#awk 'BEGIN {system("echo \"Input your name:\\c\""); getline d;print "\nYour name is",d,"\b!\n"}'

49.輸出不換行

#awk -F: '{printf? $1}'? /etc/passwd

50.toupper和tolower函數可用于字符串大小間的轉換

#awk '{ print toupper("test"), tolower("TEST") }'

51.split函數可按給定的分隔符把字符串分割為一個數組.如果分隔符沒提供,按當前FS值進行分割

#awk '{ split( "20:18:00", time, ":" ); print time[2],time[1],time[3] }'

52.sub函數匹配記錄中最大,最靠左邊的子字符串的正則表達式,并用替換字符串替換這些字符串.如果沒有指定目標字符串就默認使用整個記錄.替換只發生在第一次匹配的時候.格式如下:

#awk '{ sub(/test/, "mytest"); print }' testfile

#awk '{ sub(/test/, "mytest"); $1}; print }' testfile

53.system函數可以在awk中執行linux的命令。

#awk 'BEGIN{system("clear")}'

54.執行shell的date命令,并通過管道輸出給getline,然后getline從管道中讀取并將輸入賦值給d,split函數把變量d轉化成數組mon,然后打印數組mon的第二個元素

#awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test

# 每行后面增加一行空行

awk '1;{print ""}'

awk 'BEGIN{ORS="\n\n"};1'

# 每行后面增加一行空行。輸出文件不會包含連續的兩個或兩個以上的空行

# 注意:在Unix系統, DOS行包括的 CRLF (\r\n) 通常會被作為非空行對待

# 因此 'NF' 將會返回TRUE。

awk 'NF{print $0 "\n"}'

# 每行后面增加兩行空行

awk '1;{print "\n"}'

編號和計算:

# 以文件為單位,在每句行前加上編號 (左對齊).

# 使用制表符 (\t) 來代替空格可以有效保護頁變的空白。

awk '{print FNR "\t" $0}' files*

# 用制表符 (\t) 給所有文件加上連貫的編號。

awk '{print NR "\t" $0}' files*

# number each line of a file (number on left, right-aligned)

# Double the percent signs if typing from the DOS command prompt.

awk '{printf("%5d : %s\n", NR,$0)}'

# 給非空白行的行加上編號

# 記得Unix對于 \r 的處理的特殊之處。(上面已經提到)

awk 'NF{$0=++a " :" $0};{print}'

awk '{print (NF? ++a " :" :"") $0}'

# 計算行數 (模擬 "wc -l")

awk 'END{print NR}'

# 計算每行每個區域之和

awk '{s=0; for (i=1; i<=NF; i++) s=s+$i; print s}'

# 計算所有行所有區域的總和

awk '{for (i=1; i<=NF; i++) s=s+$i}; END{print s}'

# 打印每行每區域的絕對值

awk '{for (i=1; i<=NF; i++) if ($i < 0) $i = -$i; print }'

awk '{for (i=1; i<=NF; i++) $i = ($i < 0) ? -$i : $i; print }'

# 計算所有行所有區域(詞)的個數

awk '{ total = total + NF }; END {print total}' file

# 打印包含 "Beth" 的行數

awk '/Beth/{n++}; END {print n+0}' file

# 打印第一列最大的行

# 并且在行前打印出這個最大的數

awk '$1 > max {max=$1; maxline=$0}; END{ print max, maxline}'

# 打印每行的列數,并在后面跟上此行內容

awk '{ print NF ":" $0 } '

# 打印每行的最后一列

awk '{ print $NF }'

# 打印最后一行的最后一列

awk '{ field = $NF }; END{ print field }'

# 打印列數超過4的行

awk 'NF > 4'

# 打印最后一列大于4的行

awk '$NF > 4'

文本轉換和替代:

# 在Unix環境:轉換DOS新行 (CR/LF) 為Unix格式

awk '{sub(/\r$/,"");print}' # 假設每行都以Ctrl-M結尾

# 在Unix環境:轉換Unix新行 (LF) 為DOS格式

awk '{sub(/$/,"\r");print}

# 在DOS環境:轉換Unix新行 (LF) 為DOS格式

awk 1

# 在DOS環境:轉換DOS新行 (CR/LF) 為Unix格式

# DOS版本的awk不能運行, 只能用gawk:

gawk -v BINMODE="w" '1' infile >outfile

# 用 "tr" 替代的方法。

tr -d \r outfile # GNU tr 版本為 1.22 或者更高

# 刪除每行前的空白(包括空格符和制表符)

# 使所有文本左對齊

awk '{sub(/^[ \t]+/, ""); print}'

# 刪除每行結尾的空白(包括空格符和制表符)

awk '{sub(/[ \t]+$/, "");print}'

# 刪除每行開頭和結尾的所有空白(包括空格符和制表符)

awk '{gsub(/^[ \t]+|[ \t]+$/,"");print}'

awk '{$1=$1;print}' # 每列之間的空白也被刪除

# 在每一行開頭處插入5個空格 (做整頁的左位移)

awk '{sub(/^/, " ");print}'

# 用79個字符為寬度,將全部文本右對齊

awk '{printf "%79s\n", $0}' file*

# 用79個字符為寬度,將全部文本居中對齊

awk '{l=length();s=int((79-l)/2); printf "%"(s+l)"s\n",$0}' file*

# 每行用 "bar" 查找替換 "foo"

awk '{sub(/foo/,"bar");print}' # 僅僅替換第一個找到的"foo"

gawk '{$0=gensub(/foo/,"bar",4);print}' # 僅僅替換第四個找到的"foo"

awk '{gsub(/foo/,"bar");print}' # 全部替換

# 在包含 "baz" 的行里,將 "foo" 替換為 "bar"

awk '/baz/{gsub(/foo/, "bar")};{print}'

# 在不包含 "baz" 的行里,將 "foo" 替換為 "bar"

awk '!/baz/{gsub(/foo/, "bar")};{print}'

# 將 "scarlet" 或者 "ruby" 或者 "puce" 替換為 "red"

awk '{gsub(/scarlet|ruby|puce/, "red"); print}'

# 倒排文本 (模擬 "tac")

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

# 如果一行結尾為反斜線符,將下一行接到這行后面

# (如果有連續多行后面帶反斜線符,將會失敗)

awk '/\\$/ {sub(/\\$/,""); getline t; print $0 t; next}; 1' file*

# 排序并打印所有登錄用戶的姓名

awk -F ":" '{ print $1 | "sort" }' /etc/passwd

# 以相反的順序打印出每行的前兩列

awk '{print $2, $1}' file

# 調換前兩列的位置

awk '{temp = $1; $1 = $2; $2 = temp}' file

# 打印每行,并刪除第二列

awk '{ $2 = ""; print }'

# 倒置每行并打印

awk '{for (i=NF; i>0; i--) printf("%s ",i);printf ("\n")}' file

# 刪除重復連續的行 (模擬 "uniq")

awk 'a !~ $0; {a=$0}'

# 刪除重復的、非連續的行

awk '! a[$0]++' # 最簡練

awk '!($0 in a) {a[$0];print}' # 最有效

# 用逗號鏈接每5行

awk 'ORS=%NR%5?",":"\n"' file #bug awk 'ORS=NR%5?",":"\n"' file

選擇性的打印某些行:

# 打印文件的前十行 (模擬 "head")

awk 'NR < 11'

# 打印文件的第一行 (模擬 "head -1")

awk 'NR>1{exit};1'

# 打印文件的最后兩行 (模擬 "tail -2")

awk '{y=x "\n" $0; x=$0};END{print y}'

# 打印文件的最后一行 (模擬 "tail -1")

awk 'END{print}'

# 打印匹配正則表達式的行 (模擬 "grep")

awk '/regex/'

# 打印不匹配正則表達式的行 (模擬 "grep -v")

awk '!/regex/'

# 打印匹配正則表達式的前一行,但是不打印當前行

awk '/regex/{print x};{x=$0}'

awk '/regex/{print (x=="" ? "match on line 1" : x)};{x=$0}'

# 打印匹配正則表達式的后一行,但是不打印當前行

awk '/regex/{getline;print}'

# 以任何順序查找包含 AAA、BBB 和 CCC 的行

awk '/AAA/; /BBB/; /CCC/'

# 以指定順序查找包含 AAA、BBB 和 CCC 的行

awk '/AAA.*BBB.*CCC/'

# 打印長度大于64個字節的行

awk 'length > 64'

# 打印長度小于64個字節的行

awk 'length < 64'

# 打印從匹配正則起到文件末尾的內容

awk '/regex/,0'

awk '/regex/,EOF'

# 打印指定行之間的內容 (8-12行, 包括第8和第12行)

awk 'NR==8,NR==12'

# 打印第52行

awk 'NR==52'

awk 'NR==52 {print;exit}' # 對于大文件更有效率

# 打印兩個正則匹配間的內容 (包括正則的內容)

awk '/Iowa/,/Montana/' # 大小寫敏感

選擇性的刪除某些行:

# 刪除所有空白行 (類似于 "grep '.' ")

awk NF

awk '/./'

其他

1) 為了避免碰到awk錯誤,可以總結出以下規律:

① 確保整個awk_script用單引號括起來。

② 確保awk_script內所有引號成對出現。

③ 確保用花括號括起動作語句,用圓括號括起條件語句。

④ 可能忘記使用花括號,也許你認為沒有必要,但awk不這樣認為,將按之解釋語法。

⑤ 如果使用字符串,一定要保證字符串被雙引號括起來(在模式中除外)。

2) 在awk中,設置有意義的域名是一種好習慣,在進行模式匹配或關系操作時更容易理解。一般的變量名設置方式為name=$n。(這里name為調用的域變量名, n為實際域號。)

3) 通常在BEGIN部分給一些變量賦值是很有益的,這樣可以在awk表達式進行改動時減少很多麻煩。

4) awk的基本功能是根據指定規則抽取輸入數據的部分內容并輸出,另一個重要的功能是對輸入數據進行分析運算得到新的數據并輸出,這是通過在awk_script中對字段變量($1、$2、$3...)從新賦值或使用更大的字段變量$n(n大于當前記錄的NF)而實現的。

5) 使用字符串或正則表達式時,有時需要在輸出中加入一新行或查詢一元字符。這時就需要字符串屏蔽序列。awk中經常使用的屏蔽序列有: \b 退格鍵 \t tab鍵 \f 走紙換頁 \ddd 八進制值 \n 新行 \r 回車鍵 \c 任意其他特殊字符。eg: \\為反斜線符號

6) awk的輸出函數printf,基本上和C語言的語法類似。

① 格式: printf ("輸出模板字符串",參數列表)

② 參數列表是以逗號分隔的列表,參數可以是變量、數字值或字符串。

③ 輸出模板字符串的字符串中必須包含格式控制符,有幾個參數就要求有幾個格式控制符。模板字符串中可以只有格式控制符而沒有其它字符。

④ 格式控制符: %[-][width][.prec]fmt % : 標識一個格式控制符的開始,不可省略。 - : 表示參數輸出時左對齊,可省略。 width : 一個數字,表示參數輸出時占用域的寬度,可省略。 .prec : prec是一個數值,表示最大字符串長度或小數點右邊的位數,可省略。 fmt : 一個小寫字母,表示輸出參數的數據類型,不可省略。

⑤ 常見的fmt : c ASCII字符 d 整數 e 浮點數,科學記數法 f 浮點數,如 123.44 g 由awk決定使用哪種浮點數轉換e或f o 八進制數 s 字符串 x 十六進制數

⑥ 舉例: echo "65" | awk '{ printf ("%c\n",$0) }' // 將打印 A awk 'BEGIN{printf "%.4f\n",999}' //將打印 999.0000 awk 'BEGIN{printf "2 number:%8.4f%8.2f",999,888}' // 將打印 2 number:999.0000 888.000

總結

以上是生活随笔為你收集整理的oracle随机日期没有斜杠,收集awk的一些技巧,放到这里以方便今后查阅的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。