在Linux中没有print在awk中print和printf都可使用,区别是printf不可以自动换行
1.截取文档中的列,注重按部分输出
格式:awk’条件1{动作1}条件2{动作2}…'文件名
(1)输出第二列和第六列
BEGIN
FS内置变量
指定分隔符
可以发现第一行没有进行处理是因为要先读入第一行数据在进行处理
[root@tomcat ~]# awk '{FS=":"}{print $1 "\t" $3}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
avahi-autoipd 170
systemd-bus-proxy 999
systemd-network 998
dbus 81
polkitd 997
tss 59
postfix 89
sshd 74
mysql 27
解决方法:在FS 前强制加一个BEGIN
[root@tomcat ~]# awk BEGIN'{FS=":"}{print $1 "\t" $3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
avahi-autoipd 170
systemd-bus-proxy 999
systemd-network 998
dbus 81
polkitd 997
tss 59
postfix 89
sshd 74
mysql 27
END
在所有数字打印完之后输入qqqq
[root@tomcat ~]# awk BEGIN'{FS=":"}END{print"qqqq"}{print $1 "\t" $3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
avahi-autoipd 170
systemd-bus-proxy 999
systemd-network 998
dbus 81
polkitd 997
tss 59
postfix 89
sshd 74
mysql 27
qqqq
关系运算符
-v表示反选不包括
-F指定分隔符,不加-F,则会以空格或者tab为分隔符
[root@tomcat ~]# head -n2 /etc/passwd |awk -F ':' '{print $1}'
root
bin
要注意以下这一点
2.匹配字符或者字符串
printf命令
printf ‘输出类型输出格式’ 输出内容
把123456当成完整的输出且没有任何格式
把123456换行输出
[root@tomcat ~]# printf '%s %s %s\n' 1 2 3 4 5 6
1 2 3
4 5 6
打印文档中的内容
调整格式后输出
[root@tomcat ~]# printf '%s\t %s\t %s\t\n' $(cat student.txt)
ID Name Age
1 xx 11
2 bb 12
3 hh 13