sed & awk & tr
sed
awk
awk 是一種編程語(yǔ)言嫂用,用于在linux/unix下對(duì)文本和數(shù)據(jù)進(jìn)行處理甸怕。數(shù)據(jù)可以來(lái)自標(biāo)準(zhǔn)輸入(stdin)林艘、一個(gè)或多個(gè)文件井仰,或其它命令的輸出恶守。
awk 一般需要一個(gè)輸入,或者輸出可以是echo 或者ls 或者是后面帶個(gè)文件輸出
語(yǔ)法一啊不能是 awk [命令] file
或者 輸出命令 | awk [命令]
主要命令是 awk 'BEGIN{cmd} pattern [cmd] END[cmd]'
贡必,一辦begin會(huì)用來(lái)賦值兔港,pattern里面會(huì)做計(jì)算,順便輸出仔拟,模式就輸出衫樊,否則需要自己定義。end一般會(huì)用來(lái)打印信息
awk '! a[$0]++' 去重
[root@VM_39_7_centos ~]# cat bb.txt
111
222
111
222
444
#awk '! a[$0]++' bb.txt 去重
#$0 表示第一列
#a[$0]表述數(shù)組內(nèi)容是$0的
#!取反
#0默認(rèn)輸出
第一行:a[$0] 就是a[111]利花,此時(shí)a[111]是0科侈,通過(guò)i++后a[111]是0,取反后是1炒事,默認(rèn)輸出臀栈,但此時(shí)a[111]已經(jīng)是1
第二行:a[$0] 就是a[222],此時(shí)a[222]是0挠乳,通過(guò)i++后a[222]是0权薯,取反后是1,默認(rèn)輸出睡扬,但此時(shí)a[222]已經(jīng)是1
第三行:a[$0] 就是a[111]盟蚣,此時(shí)a[111]是1,通過(guò)i++后a[111]是1卖怜,取反后是0屎开,默認(rèn)不輸出,但此時(shí)a[111]已經(jīng)是2
·
·
·
rel https://blog.csdn.net/qq_31555951/article/details/106616163
[root@VM_39_7_centos ~]# awk '{print a[$0],!a[$0]++,a[$0],!a[$0],$0}' file
1 1 0 111
1 1 0 222
1 1 0 555
1 1 0 333
1 0 2 0 111
1 0 2 0 222
1 1 0 444
2 0 3 0 222
1 0 2 0 555
[root@VM_39_7_centos ~]# more file
111
222
555
333
111
222
444
222
555
內(nèi)置變量
FS:輸入字符風(fēng)隔符韧涨,默認(rèn)為空白字符
OFS:輸出字段分隔符牍戚,默認(rèn)為空白 字符
RS:輸入記錄分隔符(輸入換行符),指定輸入時(shí)的額換行符
NF:number of Field虑粥,當(dāng)前行的字段的個(gè)數(shù)如孝,字段數(shù)量
NR:行號(hào),當(dāng)前處理的文本行的行號(hào)
FNR:各文件分別計(jì)數(shù)的行號(hào)
FILENAME:當(dāng)前文件名
ARGC:命令行參數(shù)的個(gè)數(shù)
ARGV:數(shù)組娩贷,保存的是命令行所給定的各參數(shù)
比如:
echo -e '12:23:34:45' | awk -F: '{print $2}'
tr
- tr第晰,translate的簡(jiǎn)寫(xiě),主要用于壓縮重復(fù)字符彬祖,刪除文件中的控制字符以及進(jìn)行字符轉(zhuǎn)換操作茁瘦。
-s
-d