join 用于将两个文件中,指定栏位内容相同的行连接起来。
-a FILENUM:打印指定文件的所有行,包括没有匹配到的行。FILENUM 表示要打印的文件编号,1 表示第一个文件,2 表示第二个文件,1 2 表示两个文件都要打印。
-e EMPTY:指定在缺少匹配行时要使用的空白字段值。
-i:忽略大小写进行匹配。
-t CHAR:指定字段分隔符。
-1 FIELD:指定第一个文件中用于连接的字段,从 1 开始计数。
-2 FIELD:指定第二个文件中用于连接的字段,从 1 开始计数。
-j 指定2个文件里相同的字段,后面接第几个字段
[root@ansible_nfs cs1]# cat test.txt
1 John
2 Mary
3 Tom
[root@ansible_nfs cs1]# cat test2.txt
1 M
2 F
4 M
[root@ansible_nfs cs1]# join test.txt test2.txt
1 John M
2 Mary F
按照第二个字段连接两个文件
[root@ansible_nfs cs1]# join -1 2 -2 2 test.txt test2.txt
join: test2.txt:2: is not sorted: 2 F
输出join处理后的第一个文件的第2个字段和第二个文件的第1,2个字段
[root@ansible_nfs cs1]# join -o 1.2 2.1 2.2 test.txt test2.txt
John 1 M
Mary 2 F
按照第一个字段连接两个文件
[root@ansible_nfs cs1]# join -1 1 -2 1 test.txt test2.txt
1 John M
2 Mary F
打印第一个文件中所有的行
打印第二个文件中所有的行
[root@ansible_nfs cs1]# join -a 1 test.txt test2.txt
1 John M
2 Mary F
3 Tom
[root@ansible_nfs cs1]# join -a 2 test.txt test2.txt
1 John M
2 Mary F
4 M
忽略大小写进行匹配
[root@ansible_nfs sc2]# join -i -1 1 -2 1 file1.txt file2.txt
1 John M
2 Mary F
忽略不匹配的行
[root@ansible_nfs sc2]# join -a 1 file1.txt file2.txt
1 John M
2 Mary F
3 Tom
[root@ansible_nfs sc2]# join -a 2 file1.txt file2.txt
1 John M
2 Mary F
4 M
[root@ansible_nfs 7-1]# cat grade.txt
name chinese math English
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
[root@ansible_nfs 7-1]# cat grade2.txt
name chinese math English
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
[root@ansible_nfs 7-1]# join -j 2 grade.txt grade2.txt
chinese name math English name math English
80 cali 91 82 cali 91 82
90 tom 80 99 tom 80 99
99 lucy 70 75 lucy 70 75
60 jack 89 99 jack 89 99
paste 会把每个文件以列对列的方式,一列列合并
[root@ansible_nfs 7-1]# cat grade.txt grade2.txt
name chinese math English
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
name chinese math English
cali 80 91 82
tom 90 80 99
lucy 99 70 75
jack 60 89 99
[root@ansible_nfs 7-1]# paste grade.txt grade2.txt
name chinese math English name chinese math English
cali 80 91 82 cali 80 91 82
tom 90 80 99 tom 90 80 99
lucy 99 70 75 lucy 99 70 75
jack 60 89 99 jack 60 89 99
[root@ansible_nfs 7-1]# join grade.txt grade2.txt
name chinese math English chinese math English
cali 80 91 82 80 91 82
tom 90 80 99 90 80 99
lucy 99 70 75 99 70 75
jack 60 89 99 60 89 99
split 拆分的命令,将一个文件分割成数个
1.根据大小(字节)
-b 根据字节来截取
-C 根据字节来截取,(尽量考虑整行的输出)
-a 指定生成的文件名后缀的长度,默认为2
2.行
-5
-d 使用数字作为输出文件名的后缀。
-l 按行分割
[root@ansible_nfs cjh3]# split -5 passwd
[root@ansible_nfs cjh3]# ls
passwd xaa xab xac xad xae xaf
[root@ansible_nfs cjh3]# cat xaa
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ansible_nfs cjh3]# split -5 passwd sc_
[root@ansible_nfs cjh3]# ls
passwd sc_aa sc_ab sc_ac sc_ad sc_ae sc_af
[root@ansible_nfs cjh3]# split -l 10 passwd -d -a 3 sanchuang_
[root@ansible_nfs cjh3]# ls
passwd sanchuang_000 sanchuang_001 sanchuang_002
[root@ansible_nfs cjh3]# cat sanchuang_001
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
chenyamin:x:1000:1000::/home/chenyamin:/bin/bash
[root@ansible_nfs cjh3]# split -b 10 passwd -d cs_
[root@ansible_nfs cjh3]# ls
cs_00 cs_06 cs_12 cs_18 cs_24 cs_30 cs_36 cs_42 cs_48 cs_54 cs_60 cs_66 cs_72 cs_78 cs_84 cs_9000 cs_9006 cs_9012 cs_9018 cs_9024 cs_9030 cs_9036 cs_9042 cs_9048 cs_9054 passwd
cs_01 cs_07 cs_13 cs_19 cs_25 cs_31 cs_37 cs_43 cs_49 cs_55 cs_61 cs_67 cs_73 cs_79 cs_85 cs_9001 cs_9007 cs_9013 cs_9019 cs_9025 cs_9031 cs_9037 cs_9043 cs_9049 cs_9055
cs_02 cs_08 cs_14 cs_20 cs_26 cs_32 cs_38 cs_44 cs_50 cs_56 cs_62 cs_68 cs_74 cs_80 cs_86 cs_9002 cs_9008 cs_9014 cs_9020 cs_9026 cs_9032 cs_9038 cs_9044 cs_9050 cs_9056
cs_03 cs_09 cs_15 cs_21 cs_27 cs_33 cs_39 cs_45 cs_51 cs_57 cs_63 cs_69 cs_75 cs_81 cs_87 cs_9003 cs_9009 cs_9015 cs_9021 cs_9027 cs_9033 cs_9039 cs_9045 cs_9051 cs_9057
cs_04 cs_10 cs_16 cs_22 cs_28 cs_34 cs_40 cs_46 cs_52 cs_58 cs_64 cs_70 cs_76 cs_82 cs_88 cs_9004 cs_9010 cs_9016 cs_9022 cs_9028 cs_9034 cs_9040 cs_9046 cs_9052 cs_9058
cs_05 cs_11 cs_17 cs_23 cs_29 cs_35 cs_41 cs_47 cs_53 cs_59 cs_65 cs_71 cs_77 cs_83 cs_89 cs_9005 cs_9011 cs_9017 cs_9023 cs_9029 cs_9035 cs_9041 cs_9047 cs_9053 cs_9059
合并
[root@ansible_nfs cjh3]# cat cs_* >cs_passwd
[root@ansible_nfs cjh3]# diff cs_passwd passwd
[root@ansible_nfs cjh3]# echo $?
0
[root@ansible_nfs cjh3]# md5sum passwd
e72d4e878d989d854a73c45267b39bcf passwd
[root@ansible_nfs cjh3]# md5sum cs_passwd
e72d4e878d989d854a73c45267b39bcf cs_passwd
tr 字符串转换的命令
tr - translate or delete characters 实现字符的转换和删除功能
1.转换
2.删除
-d 删除功能 delete
-s 压缩连续的字符串为一个字符串将set2中的字符替换set1中同一位置的字符
# 1.替换
[root@sc read]# echo 11122333445566 |tr 123 abc
aaabbccc445566
[root@sc read]# echo 1112233344556611234 |tr 123 abc
aaabbccc445566aabc4
# 小写字母替换成大写字母
[root@sc read]# cat name.txt |tr [a-z] [A-Z]
CALI 12345A
ROSE 123456
JACK 11122A
QIQI 123459
HAN 1298AB
WIE 12IF10
YAO 12HU1U
YIY 1IGI13
[root@sc read]# cat name.txt |tr 123 abc
cali abc45a
rose abc456
jack aaabba
qiqi abc459
han ab98ab
wie abifa0
yao abhuau
yiy aigiac
[root@sc read]# tr 123 abc name.txt
tr: 额外的操作数 "name.txt"
Try 'tr --help' for more information.
[root@sc read]# tr 123 abc < name.txt
cali abc45a
rose abc456
jack aaabba
qiqi abc459
han ab98ab
wie abifa0
yao abhuau
yiy aigiac
# 压缩
[root@ansible_nfs 7-3]# echo 111111122222222222333333333411234|tr -s 123
12341234
[root@ansible_nfs 7-1]# df |tr -s " "|cut -d " " -f 1,3
文件系统 已用
devtmpfs 0
tmpfs 0
tmpfs 9736
tmpfs 0
/dev/mapper/centos-root 6302264
/dev/sda1 194028
tmpfs 0
[root@sc read]# w
11:31:19 up 1:49, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:14 1:16m 0.00s 0.00s -bash
root pts/0 192.168.102.1 09:42 7.00s 0.05s 0.00s w
[root@sc read]# w|tr -s " " # 将连续的空格压缩成一个空格
11:31:27 up 1:49, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty1 10:14 1:16m 0.00s 0.00s -bash
root pts/0 192.168.102.1 09:42 7.00s 0.05s 0.00s w
[root@sc read]# echo 11111111112222222222333333333|tr -s 123
123
[root@sc read]# echo 111111111122222222223333333331234|tr -s 123
1231234
# 先替换再压缩
[root@sc read]# echo 111111111122222222223333333331234|tr -s 123 abc
abcabc4
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt
91
80
70
89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs
91 80 70 89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs|tr " " "+"
91+80+70+89
[root@ansible_nfs 7-1]# awk 'NR>1{print $3}' grade.txt |xargs|tr " " "+"|bc
330
# 2.删除
[root@ansible_nfs 7-1]# ip a|awk '/ens33$/ {print $2}'|tr -d "/24"
19.168.10.138
[root@sc read]# echo 111222334455|tr -d 345
111222
[root@sc read]# tr -d [0-9] < /etc/hosts
... localhost localhost.localdomain localhost localhost.localdomain
:: localhost localhost.localdomain localhost localhost.localdomain
# 统计/etc/passwd/中sbin的个数
[root@sc read]# cat /etc/passwd |grep sbin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
zabbix:x:997:995:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
apache:x:48:48:Apache:/opt/rh/httpd24/root/usr/share/httpd:/sbin/nologin
nginx:x:996:993:Nginx web server:/var/opt/rh/rh-nginx116/lib/nginx:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
named:x:25:25:Named:/var/named:/sbin/nologin
[root@sc read]# cat /etc/passwd |grep sbin|wc -l
23
[root@sc read]# cat /etc/passwd |grep -o sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
sbin
[root@sc read]# cat /etc/passwd |grep -o sbin|wc -l
26
[root@sc read]# cat /etc/passwd |tr ":" "\n"|grep sbin
/sbin/nologin
/sbin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin
/sbin
/sbin/shutdown
/sbin
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@sc read]# cat /etc/passwd |tr ":" "\n"|grep sbin|wc -l
26
案例:tr命令操作
[root@sc read]# df -Th
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.8M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 7.5G 9.6G 45% /
/dev/sda1 xfs 1014M 190M 825M 19% /boot
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs tmpfs 182M 0 182M 0% /run/user/0
# 压缩连续的空格
[root@sc read]# df -Th|tr -s " "
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.8M 900M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 7.5G 9.6G 45% /
/dev/sda1 xfs 1014M 190M 825M 19% /boot
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay overlay 17G 7.5G 9.6G 45% /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs tmpfs 182M 0 182M 0% /run/user/0
# 删除%
[root@sc read]# df -Th|tr -d "%"
文件系统 类型 容量 已用 可用 已用 挂载点
devtmpfs devtmpfs 898M 0 898M 0 /dev
tmpfs tmpfs 910M 0 910M 0 /dev/shm
tmpfs tmpfs 910M 9.8M 900M 2 /run
tmpfs tmpfs 910M 0 910M 0 /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 7.5G 9.6G 45 /
/dev/sda1 xfs 1014M 190M 825M 19 /boot
overlay overlay 17G 7.5G 9.6G 45 /var/lib/docker/overlay2/4bdbe233a30f68ed77dc7341a0998fd70e7eec51418875a9681eefe31a7802ff/merged
overlay overlay 17G 7.5G 9.6G 45 /var/lib/docker/overlay2/f205459c510139da6cff5baf2982fbf0aecd138ceff8605d323d9df0cec70154/merged
overlay overlay 17G 7.5G 9.6G 45 /var/lib/docker/overlay2/86a2fa2b3e8d2b656e91d2ab2078f601d30590ead3bf90ee8c59a3f1eafa0553/merged
tmpfs tmpfs 182M 0 182M 0 /run/user/0
[root@sc read]# df -Th|tr -d "%"|grep "/$"|awk '{print $6}'
45
# 将/etc/hosts 小写字母和数字删除
[root@sc read]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@sc read]# tr -d [0-9][a-z] </etc/hosts
... . .
:: . .
# 将/etc/passwd的小写字母替换成大写字母
[root@sc read]# tr [a-z] [A-Z] </etc/passwd
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
SHUTDOWN:X:6:0:SHUTDOWN:/SBIN:/SBIN/SHUTDOWN
HALT:X:7:0:HALT:/SBIN:/SBIN/HALT
MAIL:X:8:12:MAIL:/VAR/SPOOL/MAIL:/SBIN/NOLOGIN
OPERATOR:X:11:0:OPERATOR:/ROOT:/SBIN/NOLOGIN
GAMES:X:12:100:GAMES:/USR/GAMES:/SBIN/NOLOGIN
FTP:X:14:50:FTP USER:/VAR/FTP:/SBIN/NOLOGIN
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:192:192:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
DBUS:X:81:81:SYSTEM MESSAGE BUS:/:/SBIN/NOLOGIN
POLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGIN
SSHD:X:74:74:PRIVILEGE-SEPARATED SSH:/VAR/EMPTY/SSHD:/SBIN/NOLOGIN
POSTFIX:X:89:89::/VAR/SPOOL/POSTFIX:/SBIN/NOLOGIN
CHRONY:X:998:996::/VAR/LIB/CHRONY:/SBIN/NOLOGIN
CHENYAMIN:X:1000:1000::/HOME/CHENYAMIN:/BIN/BASH
ZABBIX:X:997:995:ZABBIX MONITORING SYSTEM:/VAR/LIB/ZABBIX:/SBIN/NOLOGIN
APACHE:X:48:48:APACHE:/OPT/RH/HTTPD24/ROOT/USR/SHARE/HTTPD:/SBIN/NOLOGIN
NGINX:X:996:993:NGINX WEB SERVER:/VAR/OPT/RH/RH-NGINX116/LIB/NGINX:/SBIN/NOLOGIN
MYSQL:X:27:27:MARIADB SERVER:/VAR/LIB/MYSQL:/SBIN/NOLOGIN
MYSQLROUTER:X:995:992:MYSQL ROUTER:/VAR/LIB/MYSQLROUTER:/BIN/FALSE
JENKINS:X:994:991:JENKINS AUTOMATION SERVER:/VAR/LIB/JENKINS:/BIN/BASH
NAMED:X:25:25:NAMED:/VAR/NAMED:/SBIN/NOLOGIN
SC:X:1001:1001::/HOME/SC:/BIN/BASH
xargs 是一个传递参数的命令,将前面命令的输出送给后面的命令做参数使用
[root@sc read]# echo feng.txt |ls -l
总用量 28
-rw-r--r-- 1 root root 258 7月 26 00:24 create_user.sh
-rw-r--r-- 1 root root 23 7月 26 00:49 feng.txt
-rw-r--r-- 1 root root 282 7月 26 01:22 menu.sh
-rw-r--r-- 1 root root 268 7月 26 00:54 qi.sh
-rw-r--r-- 1 root root 247 7月 25 23:53 read_.sh
-rw-r--r-- 1 root root 10 7月 26 01:15 t1.txt
-rw-r--r-- 1 root root 369 7月 26 01:01 user_passwd.sh
[root@sc read]# echo feng.txt |xargs ls -l
-rw-r--r-- 1 root root 23 7月 26 00:49 feng.txt
[root@ansible_nfs 7-3]# cat facebook.txt
google 110 5000
baidu 100 5000
guge 50 3000
sohu 100 4500
[root@ansible_nfs 7-3]# cat facebook.txt |xargs
google 110 5000 baidu 100 5000 guge 50 3000 sohu 100 4500