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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

文件自定义变量_awk 内置变量与自定义变量

發布時間:2024/1/23 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件自定义变量_awk 内置变量与自定义变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊上方“生信科技愛好者”,馬上關注真愛,請置頂或星標

作者:ghostwu

原文:https://www.cnblogs.com/ghostwu/p/9085653.html

AWK 中,變量分為兩種:內置變量與自定義變量。

內置變量

常見的內置變量有:

  • 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 内置变量与自定义变量的全部內容,希望文章能夠幫你解決所遇到的問題。

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