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