Linux常用命令2

字符转换命令: tr, col, join, paste, expand

tr

tr 可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换!

[root@www ~]# tr [-ds] SET1 ...
选项与参数:
-d :删除讯息当中的 SET1 这个字符串;
-s :取代掉重复的字符!
范例一:将 last 输出的讯息中,所有的小写变成大写字符:
[root@www ~]# last | tr '[a-z]' '[A-Z]'
# 事实上,没有加上单引号也是可以执行的,如:『 last | tr [a-z] [A-Z] 』
范例二:将 /etc/passwd 输出的讯息中,将冒号 (:) 删除
[root@www ~]# cat /etc/passwd | tr -d ':'

col

[root@www ~]# col [-xb]
选项与参数:
-x :将 tab 键转换成对等的空格键
-b :在文字内有反斜杠 (/) 时,仅保留反斜杠最后接的那个字符
范例一:利用 cat -A 显示出所有特殊按键,最后以 col 将 [tab] 转成空白
[root@www ~]# cat -A /etc/man.config <==此时会看到很多 ^I 的符号,那
就是 tab
[root@www ~]# cat /etc/man.config | col -x | cat -A | more
# 嘿嘿!如此一来, [tab] 按键会被取代成为空格键,输出就美观多了!
范例二:将 col 的 man page 转存成为 /root/col.man 的纯文本档
[root@www ~]# man col > /root/col.man
[root@www ~]# vi /root/col.man
COL(1) BSD General Commands Manual COL(1)
N^HNA^HAM^HME^HE
 c^Hco^Hol^Hl - filter reverse line feeds from input
S^HSY^HYN^HNO^HOP^HPS^HSI^HIS^HS
 c^Hco^Hol^Hl [-^H-b^Hbf^Hfp^Hpx^Hx] [-^H-l^Hl
_^Hn_^Hu_^Hm]
# 你没看错!由于 man page 内有些特殊按钮会用来作为类似特殊按键与颜色显
示,
# 所以这个档案内就会出现如上所示的一堆怪异字符(有 ^ 的)
[root@www ~]# man col | col -b > /root/col.man

join

join 看字面上的意义 (加入/参加) 就可以知道,他是在处理两个档案之间的数据, 而且,主要是在处理
『两个档案当中,有 "相同数据" 的那一行,才将他加在一起』的意思

[root@www ~]# join [-ti12] file1 file2
选项与参数:
-t :join 默认以空格符分隔数据,并且比对『第一个字段』的数据,
 如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字的 1 ,代表『第一个档案要用那个字段来分析』的意思;
-2 :代表『第二个档案要用那个字段来分析』的意思。


有两个文件

stu.txt
01 zhangsan 23 man
02 lisi 24 woman
03 wangwu 25 man

class.txt
01 3
02 2
03 1

将这两个文件进行join
[root@iz2zedroc0yv90u3zvx212z ~]# join stu class
01 zhangsan 23 man
02 lisi 24 woman
03 wangwu 25 man

paste

paste 直接『将两行贴在一起,且中间以 [tab] 键隔开』!

[root@www ~]# paste [-d] file1 file2
选项与参数:
-d :后面可以接分隔字符。预设是以 [tab] 来分隔的!
- :如果 file 部分写成 - ,表示来自 standard input 的资料的意思。
范例一:将 /etc/passwd 与 /etc/shadow 同一行贴在一起
[root@www ~]# paste /etc/passwd /etc/shadow
bin:x:1:1:bin:/bin:/sbin/nologin bin:*:14126:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:14126:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:14126:0:99999:7:::
# 注意喔!同一行中间是以 [tab] 按键隔开的!
范例二:先将 /etc/group 读出(用 cat),然后与范例一贴上一起!且仅取出前三
行
[root@www ~]# cat /etc/group|paste /etc/passwd /etc/shadow -|head -n
3
# 这个例子的重点在那个 - 的使用!那玩意儿常常代表 stdin 喔!

文件切分命令 split

如果你有档案太大,导致一些携带式装置无法复制的问题,嘿嘿!找 split 就对了! 他可以帮你将一个
大档案,依据档案大小或行数来分割,就可以将大档案分割成为小档案了! 快速又有效啊!真不错~

[root@www ~]# split [-bl] file PREFIX
选项与参数:
-b :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l :以行数来进行分割。
PREFIX :代表前导符的意思,可作为分割档案的前导文字。
范例一:我的 /etc/termcap 有七百多 K,若想要分成 300K 一个档案时?
[root@www ~]# cd /tmp; split -b 300k /etc/termcap termcap
[root@www tmp]# ll -k termcap*
-rw-r--r-- 1 root root 300 Feb 7 16:39 termcapaa
-rw-r--r-- 1 root root 300 Feb 7 16:39 termcapab
-rw-r--r-- 1 root root 189 Feb 7 16:39 termcapac
# 那个档名可以随意取的啦!我们只要写上前导文字,小档案就会以
# xxxaa, xxxab, xxxac 等方式来建立小档案的!
范例二:如何将上面的三个小档案合成一个档案,档名为 termcapback
[root@www tmp]# cat termcap* >> termcapback
# 很简单吧?就用数据流重导向就好啦!简单!
范例三:使用 ls -al / 输出的信息中,每十行记录成一个档案
[root@www tmp]# ls -al / | split -l 10 - lsroot
[root@www tmp]# wc -l lsroot*
 10 lsrootaa
 10 lsrootab
 6 lsrootac
 26 total

Linux WordCount

awk 'BEGIN{FS=","} { for(i=1;i<=NF;i++) {print $i} }' wc.txt |sort|uniq -c|sort -r |awk '{print $2","$1}'

awk -F "," '{for(i=1;i<=NF;i++) {print $i}}' wc.txt |sort|uniq -c|sort -r|awk '{print $2,$1}'
posted @ 2020-12-31 11:12  告一段落  阅读(94)  评论(0编辑  收藏  举报