sed & awk & tr
sed
awk
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。
awk 一般需要一个输入,或者输出可以是echo 或者ls 或者是后面带个文件输出
语法一啊不能是 awk [命令] file
或者 输出命令 | awk [命令]
主要命令是 awk 'BEGIN{cmd} pattern [cmd] END[cmd]'
,一办begin会用来赋值,pattern里面会做计算,顺便输出,模式就输出,否则需要自己定义。end一般会用来打印信息
awk '! a[$0]++' 去重
[root@VM_39_7_centos ~]# cat bb.txt
111
222
111
222
444
#awk '! a[$0]++' bb.txt 去重
#$0 表示第一列
#a[$0]表述数组内容是$0的
#!取反
#0默认输出
第一行:a[$0] 就是a[111],此时a[111]是0,通过i++后a[111]是0,取反后是1,默认输出,但此时a[111]已经是1
第二行:a[$0] 就是a[222],此时a[222]是0,通过i++后a[222]是0,取反后是1,默认输出,但此时a[222]已经是1
第三行:a[$0] 就是a[111],此时a[111]是1,通过i++后a[111]是1,取反后是0,默认不输出,但此时a[111]已经是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
内置变量
FS:输入字符风隔符,默认为空白字符
OFS:输出字段分隔符,默认为空白 字符
RS:输入记录分隔符(输入换行符),指定输入时的额换行符
NF:number of Field,当前行的字段的个数,字段数量
NR:行号,当前处理的文本行的行号
FNR:各文件分别计数的行号
FILENAME:当前文件名
ARGC:命令行参数的个数
ARGV:数组,保存的是命令行所给定的各参数
比如:
echo -e '12:23:34:45' | awk -F: '{print $2}'
tr
- tr,translate的简写,主要用于压缩重复字符,删除文件中的控制字符以及进行字符转换操作。
-s
-d