cut命令;
cut [选项] 文件名 默认分割符是制表符
选项: -f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
eg:#cut -f 2 aa.txt 提取第二列 默认是使用制表符切割 (可以使用,隔开,指定提取多个列)
eg:#cut -d ":" -f 1,3 /etc/passwd 以:分割,提取第1和第3列 (指定切割符是:)
cut -d " " -f 1 ,3
-f
指定分割符是空格,提取第2,4,列
awk 一个强大的文本分析工具
把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
语法:awk ‘条件1{动作1}条件2{动作2}...’文件名
| 是管道命令,将第一个的输出,作为第二个的输入。
AWK读取输入文件一次一行,默认情况下的awk打印文件的每一行。
[root@hadoop001 shell-study]# cat employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
[root@hadoop001 shell-study]#
[root@hadoop001 shell-study]#
[root@hadoop001 shell-study]# awk '{print;}' employee.txt
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
[root@hadoop001 shell-study]#
[root@hadoop001 shell-study]#
[root@hadoop001 shell-study]# awk '/Thomas/' employee.txt
100 Thomas Manager Sales $5,000
有上图可见cut与awk的区别,以及cut的局限性,如果多个空格连在一起,就会切割出空格作其中的一列。
而,
awk有内置的变量。对于每一个记录,即行,分隔空白字符分隔记录默认情况下,它存储在$ n个变量。如果该行有4个词,它会被存储在$ 1,$2,$ 3和$ 4。 $0表示整行。 NF是一个内置变量,它代表这一行有多少个被分隔的域.
使用awk,
awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
awk -F ':' 'BEGIN {print "name,shell"} {print $1","$2} END {print "blue,/bin/nosh"}' 123.txt
-F 用于指定分割符为“:” ,{print $1","$2} ,输出第一个域和第二个域,双引号之前的“,”,用于指定输出时,$1 和 $2 之间的分隔符。
awk -F ':' '{print $1"\t"$7}' 这里的分隔符是制表符"\t"
sed命令
主要进行文本替换
sed ‘s/it/edu360/g’ sed.txt 把sed.txt文件中的it替换为edu360,并输出
#更改短信发送报文 #1->id #2->年 #3->月 #4->日 #5->票数 #6->金额 #7->手机号 #8->时间 2018-08-08 13:23:33 形式
sed -e "s/#1/$unixSecond/g" -e "s/#2/$TSK_YEAR/g" -e "s/#3/$TSK_MONTH/g" -e "s/#4/$TSK_DAY/g" -e "s/#5/$total/g" -e "s/#6/$money/g" -e "s/#7/$mobile/g" -e "s/#8/$timenow_t/g" msg_content_template.txt > msg_content_template_cur.txt