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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

作者:ghostwu

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

AWK 中,變量分為兩種:內(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。