sed awk sort uniq grep seq

1.显示主机名: cat /etc/sysconfig/network |grep HOSTNAME | awk -F "=" '{print $2}'

2.显示文件行数:wc -l file

3.file1先排序再去重保存到file2:cat file1 | sort | uniq >file2

4.去除file1里的空格保存到file2: 第一种方法:sed 's/[[:space:]]//g' file1>file2 ;第二种方法 cat file1 | sed 's/ //g'>file2

5.file以:为分隔符打印第二列:awk -F ':' '{print $2}' file

6.grep -v  过滤掉  

7.找出file1与file2 中相同的输出到file3:第一种方法,awk 'NR==FNR{a[$0]++} NR>FNR&&a[$0]'  file1 file2 > file3

   第二种方法:awk  'NR==FNR{a[$0]}NR>FNR{ if($1 in a)    print $0}' file1 file2 > file3

8.把file2中没在file1中的提出到file3:awk  'NR==FNR{a[$0]}NR>FNR{ if(!($1 in a)) print $0}' file1 file2 >file3

9.查看内存:free | awk 'NR==2' | awk '{print $5}'  

10.计算相除保留4位小数:echo "scale=4;9112504 / 65535992" | bc

11.cat /etc/passwd | cut -d : -f 3 #以:分割,取第三段

21sort
默认的排序规则为字符集排序规则,通常几种常见字符的顺序为:"空字符串<空白字符<数值<a<A<b<B<...<z<Z",这也是字典排序的规则。
sort [OPTION]... [FILE]...
#加*为常用项
 
选项说明:
-c:检测给定的文件是否已经排序。如未排序,则会输出诊断信息,提示从哪一行开始乱序。
-C:类似于"-c",只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序。
-m:对给定的多个已排序文件进行合并。在合并过程中不做任何排序动作。
-b:忽略字段的前导空白字符。空格数量不固定时,该选项几乎是必须要使用的。"-n"选项隐含该选项。
-d:按照字典顺序排序,只支持字母、数值、空白。除了特殊字符,一般情况下基本等同于默认排序规则。
--debug:将显示排序的过程以及每次排序所使用的字段、字符。同时还会在最前几行显示额外的信息。
*-f:将所有小写字母当成大写字母。例如,"b"和"B"是相同的。
  :在和"-u"选项一起使用时,如果排序字段的比较结果相等,则丢弃小写字母行。
*-k:指定要排序的key,key由字段组成。key格式为"POS1[,POS2]",POS1为key起始位置,POS2为key结束位置。
*-n:按数值排序。空字符串""或""被当作空。该选项除了能识别负号"-",其他所有非数字字符都不识别。
  :当按数值排序时,遇到不识别的字符时将立即结束该key的排序。
-M:按字符串格式的月份排序。会自动转换成大写,并取缩写值。规则:unknown<JAN<FEB<...<NOV<DEC。
-o:将结果输出到指定文件中。
*-r:默认是升序排序,使用该选项将得到降序排序的结果。
  :注意:"-r"不参与排序动作,只是操作排序完成后的结果。
-s:禁止sort做"最后的排序"。
*-t:指定字段分隔符。
  :对于特殊符号(如制表符),可使用类似于-t$' '或-t'ctrl+v,tab'(先按ctrl+v,然后按tab键)的方法实现。
*-u:只输出重复行的第一行。结合"-f"使用时,重复的小写行被丢弃。
1、不加任何选项时,将对整行从第一个字符开始依次向后直到行尾按照默认的字符集排序规则做升序排序。而且以"空字符串<空白字符<数值<a<A<b<B<...<z<Z"的顺序排序
[root@centos7 ~]# cat ./a.txt|sort
" "
1:a
2:b
3:c
a
A
Aadfs
asdfs       #单字符a与A的排序确实是a<A,如果a或者A后面还有字符,那么他们属于同级,看后面字符的顺序
b
B
c
C
dsddasda
单字符a与A的排序确实是a<A,如果a或者A后面还有字符,那么他们属于同级,看后面字符的顺序
2.以某一列为排序列进行排序。由于要划分字段,所以指定字段分隔符(sort中的k、t相对于cut中的f、d,如果比较的是数字应该加-n,不然会当做字符串依次比较)
[root@centos7 ~]# cat a.txt
1:a:300
2:b:100
3:c:200
[root@centos7 ~]# sort -t: -k3 -n a.txt
2:b:100
3:c:200
1:a:300
3.--debug可以调试过程
[root@centos7 ~]# sort --debug -t: -k3 -n a.txt
sort: using ‘en_US.UTF-8’ sorting rules
sort: key 1 is numeric and spans multiple fields
2:b:100
    ___
_______
3:c:200
    ___
_______
1:a:300
    ___
_______
[root@centos7 ~]#
4.若某一行排序有许多相同的值,需要二次排序的时候
[root@centos7 ~]# sort -t: -k3n  -k4r  a.txt  
2:b:100:c
3:c:200:b
a:d:200:a
1:a:300:d
-n:按数值排序。空字符串""或""被当作空。该选项除了能识别负号"-",其他所有非数字字符都不识别。 :当按数值排序时,遇到不识别的字符时将立即结束该key的排序。
5.-u去除重复字段所在的行(只保留排在前面的第一行)
[root@centos7 ~]# sort -t: -k3n  -k4r  -u a.txt
2:b:100:c
3:c:200:b
a:d:200:a
1:a:300:d
[root@centos7 ~]# sort -t: -k3n    -u a.txt    
2:b:100:c
3:c:200:b
1:a:300:d
说明第一次试验是2次排完在去重,那么重心在第4列了,所以-u是没有效果的;
22uniq
uniq是去重,不相邻的行不算重复值。
uniq [OPTION]... [INPUT [OUTPUT]]
选项说明:
*-c:统计出现的次数(count)。
*-d:只显示被计算为重复的行。
-D:显示所有被计算为重复的行。
*-u:显示唯一值,即没有重复值的行。
-i:忽略大小写。
-z:在末尾使用,而不是换行符。
-f:跳过多少个字段(field)开始比较重复值。
-s:跳过多少个字符开始比较重复值。
-w:比较重复值时每行比较的最大长度。即对每行多长的字符进行比较。
[root@centos7 ~]# cat a.txt        
111
223
56
111
111
567
223
[root@centos7 ~]# uniq a.txt
111
223
56
111
567
223
所以说uniq去排除连续的重复值,跟tr的-s一样;
[root@centos7 ~]# sort a.txt
111
111
111
223
223
56
567
[root@centos7 ~]# sort a.txt |uniq
111
223
56
567
#使用-d参数来显示哪几行是重复的
[root@centos7 ~]# sort a.txt |uniq -d
111
223
#-u正好相反显示没有重复的行
[root@centos7 ~]# sort a.txt |uniq -u
56
567
#使用-c统计哪些记录出现的次数
[root@centos7 ~]# sort a.txt |uniq -c
      3 111
      2 223
      1 56
      1 567
#sort与uniq必须要连用,不然会出现这样的情况
[root@centos7 ~]# cat a.txt |uniq -c   
      1 111
      1 223
      1 56
      2 111
      1 567
      1 223
两者经常搭配使用,做到去重,很重要一点uniq的去重仅仅对相邻2行;
22seq
seq命令用于输出数字序列。支持正数序列、负数序列、小数序列。
seq [OPTION]... LAST                  # 指定输出的结尾数字,初始值和步长默认都为1
seq [OPTION]... FIRST LAST            # 指定开始和结尾数字,步长默认为1
seq [OPTION]... FIRST INCREMENT LAST  # 指定开始值、步长和结尾值
OPTION:
-s:指定分隔符,默认是 。
-w:使用0填充左边达到数字的最大宽度。
[root@centos7 ~]# seq 5
1
2
3
4
5
#默认以 作为分隔符
#同样可以以-s指定分隔符
[root@centos7 ~]# seq -s '-' 5
1-2-3-4-5
[root@centos7 ~]# seq -s '-' 5 3 10
5-8
#中间为指定的步长
[root@centos7 ~]# seq -w 99 100 2000      
0099
0199
0299
0399
0499
0599
0699
0799
0899
0999
1099
1199
1299
1399
1499
1599
1699
1799
1899
1999
23wc
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。
1.命令格式:
wc [选项]文件...
2.命令功能:
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
3.命令参数:
-c 统计字节数。
-l 统计行数。
-m 统计字符数。这个标志不能与 -c 标志一起使用。
-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
-L 打印最长行的长度。
-help 显示帮助信息
--version 显示版本信息
awk之NR==FNR问题
NR,表示awk开始执行程序后所读取的数据行数.
FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.
下面看两个例子:
1,对于单个文件NR 和FNR 的 输出结果一样的 :
# awk '{print NR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
 
#awk '{print FNR,$0}' file1
1 a b c d
2 a b d c
3 a c b d
  
2,但是对于多个文件 :
# awk '{print NR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
4 aa bb cc dd
5 aa bb dd cc
6 aa cc bb dd
 
# awk '{print FNR,$0}' file1 file2
1 a b c d
2 a b d c
3 a c b d
1 aa bb cc dd
2 aa bb dd cc
3 aa cc bb dd
简单回顾下AWK的用法:
$0       表示整个当前行
$1                 每行第一个字段
NF                 字段数量变量
NR              每行的记录号,多文件记录递增
FNR            与NR类似,不过多文件记录不递增,每个文件都从1开始
                制表符
               换行符
FS              BEGIN时定义分隔符
RS           输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~                匹配,与==相比不是精确比较
!~               不匹配,不精确比较
==             等于,必须全部相等,精确比较
!=               不等于,精确比较
&&          逻辑与
||                 逻辑或
+                匹配时表示1个或1个以上
/[0-9][0-9]+/       两个或两个以上数字
/[0-9][0-9]*/        一个或一个以上数字
OFS          输出字段分隔符, 默认也是空格,可以改为制表符等
ORS            输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F’[:#/]’       定义三个分隔符
 
 
原文地址:https://www.cnblogs.com/xl-892694298/p/11016788.html