文件自定义变量_awk 内置变量与自定义变量
作者:ghostwu
原文:https://www.cnblogs.com/ghostwu/p/9085653.htmlAWK 中,變量分為兩種:內(nèi)置變量與自定義變量。
內(nèi)置變量
常見的內(nèi)置變量有:
FS:輸入字段分隔符, 默認(rèn)為空白字符;
OFS:輸出字段分隔符, 默認(rèn)為空白字符;
RS:輸入記錄分隔符(輸入換行符), 指定輸入時(shí)的換行符;
ORS:輸出記錄分隔符(輸出換行符),輸出時(shí)用指定符號(hào)代替換行符;
NF:number of Field,當(dāng)前行的字段的個(gè)數(shù)(即當(dāng)前行被分割成了幾列),字段數(shù)量;
NR:行號(hào),當(dāng)前處理的文本行的行號(hào);
FNR:各文件分別計(jì)數(shù)的行號(hào);
FILENAME:當(dāng)前文件名;
ARGC:命令行參數(shù)的個(gè)數(shù);
ARGV:數(shù)組,保存的是命令行所給定的各參數(shù)。
1. NF 打印字段數(shù)
下面的 NF 打印出每行有多少列。
$?awk?'{print?NF}'?ghostwu.txt?2
$?cat?ghostwu.txt?
ghostwu
zhangsan?22
lisi?23?woman
2. 引用 NF 變量
引用 NF 變量,需要用美元符號(hào)。
$?cat?ghostwu.txt?ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
$?awk?'{print?$NF}'?ghostwu.txt?
man
woman
woman
$?awk?'{print?$(NF-2),?$(NF-1),?$(NF)}'?ghostwu.txt?
ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
3. NR 打印行號(hào)
使用 NR 打印每一行的行號(hào):
$?awk?'{print?NR,$0}'?ghostwu.txt?1?ghostwu?20?man
2?zhangsan?22?woman
3?lisi?23?woman
4. NR 與 FNR
awk 支持多文件掃描,如果采用 NR,下一個(gè)文件的行序號(hào)會(huì)接著上一個(gè)文件;如果使用 FNR,就會(huì)單獨(dú)統(tǒng)計(jì)。
$?awk?'{print?NR,?$0}'?ghostwu.txt?ghostwu.bak?ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
$?awk?'{print?FNR,?$0}'?ghostwu.txt?ghostwu.bak?
ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
5. RS 指定行分隔符
RS 指定行輸入符,默認(rèn)為回車換行,如果我們想讓它以空格作為行輸入符( 即,遇到空格就換行 ),當(dāng)我們指定使用空格作為"行分隔符"時(shí),在 awk 解析文本時(shí),每當(dāng)遇到空格,awk 就認(rèn)為遇到的空格是換行符,于是 awk 就將文本換行了。
$?awk?'{print?NR,?$0}'?ghostwu.txt?ghostwu?20?man
zhangsan?22?woman
lisi?23?woman
$?awk?-v?RS="?"?'{print?NR,?$0}'?ghostwu.txt
ghostwu
20
man
zhangsan
22
woman
lisi
23
woman
6. ORS 指定輸出行分隔符
ghostwu@dev:~/linux/awk$?awk?-v?ORS='---->'?'{print?$0}'?ghostwu.txt?
ghostwu?20?man---->zhangsan?22?woman---->lisi?23?woman---->ghostwu@dev:~/linux/awk$?
7. 同時(shí)指定輸入,輸出行分隔符
$?awk?-v?RS="?"?-v?ORS='->'?'{print?$0}'?ghostwu.txt
ghostwu->20->man
zhangsan->22->woman
lisi->23->woman
8. 使用 FILENAME 打印文件名稱
$?awk?'{print?FILENAME,?NR,?$0}'?ghostwu.txt?ghostwu.bak
ghostwu.txt?1?ghostwu?20?man
ghostwu.txt?2?zhangsan?22?woman
ghostwu.txt?3?lisi?23?woman
ghostwu.bak?4?ghostwu?20?man
ghostwu.bak?5?zhangsan?22?woman
ghostwu.bak?6?lisi?23?woman
9. ARGV 保存命令行參數(shù)的數(shù)組
ARGV 保存命令行參數(shù)的數(shù)組,'pattern{action}'并不被看做參數(shù)。
$?awk?'{print?ARGV[0],?ARGV[1],?ARGV[2]}'?ghostwu.txt?awk?ghostwu.txt?
awk?ghostwu.txt?
awk?ghostwu.txt?
10. ARGC 保存命令行參數(shù)個(gè)數(shù)
使用 ARGC 可以保存命令行參數(shù)的個(gè)數(shù),下例中ARGV[1]沒有值,因?yàn)槊钚袥]有給第三個(gè)參數(shù)。
$?awk?'{print?ARGV[0],?ARGV[1],?ARGV[2],?ARGC}'?ghostwu.txt?awk?ghostwu.txt??2
awk?ghostwu.txt??2
awk?ghostwu.txt??2
自定義變量
awk 常見的用戶自己定義的變量,有兩種形式:通過 -v 變量名的形式,和在 program 中直接定義。
1. -v varname=value
使用-v varname=value的形式自定義變量時(shí), 變量名區(qū)分字符大小寫。
$?awk?-v?my_name="hello?world"?'BEGIN{print?my_name}'hello?world
2. 在 program 中直接定義變量
在 program 中直接定義變量時(shí),以下定義了3個(gè)自定義變量,其實(shí)形式像編程語言一樣,定義的時(shí)候用分號(hào)。打印變量跟之前一樣,用逗號(hào)隔開,注意,不需要用美元符號(hào)。
$?awk?'BEGIN{?my_name="zhangsan";?my_age=22;?my_sex="男";?print?my_name,?my_age,?my_sex}'zhangsan?22?男
3. 引用命令行定義的變量
除了 1、2 的自定義變量方式外,我們也可以引用命令行定義的變量。
$?echo?$myvar$?myvar="我在命令行定義的變量"
$?awk?-v?var1=$myvar?'BEGIN{print?var1}'
我在命令行定義的變量
—END—
聲明:本公眾號(hào)所有轉(zhuǎn)載的文章僅用于參考學(xué)習(xí)使用,文章包括文字與圖片在內(nèi)的著作權(quán)屬于原作者所有,禁止用于商用。文章任何形式的轉(zhuǎn)載請聯(lián)系原作者獲得授權(quán)。
戳原文,更有料!總結(jié)
以上是生活随笔為你收集整理的文件自定义变量_awk 内置变量与自定义变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java正则匹配英文句号_「正则表达式」
- 下一篇: easyui框架前后端交互_Easyui