添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
# $0 表示原文件的行内容 head /etc/passwd | awk -v FS= ":" -v OFS= "\t" '{print $1,$2,$(NF-1),$NF}'

(2)按照列的特征筛选行

#第四列值大于0的行
#比较下面两个命令的差异,$0表示原文件的行内容
head /etc/passwd | awk -v FS=":" -v OFS="\t" '$4 > 0{print $0}' 
head /etc/passwd | awk -v FS=":" -v OFS="\t" '$4 > 0{print $1,$2,$4}' 
#第六列值内容为 "/sbin"的行
head /etc/passwd | awk -v FS=":" -v OFS="\t" '$6 == "/sbin" {print $1,$2,$6}' 
#最后一列值内容包含 "nologin"的行
head /etc/passwd | awk -v FS=":" -v OFS="\t" '$NF ~ nologin {print $1,$2,$NF}'
## 可使用 && || 将多个筛选条件结合起来进行筛选
## 还有更多更复杂的筛选方法,具体需要用到时在做学习

4、cut

(1)截取每行指定位置的字符(串)

#截取第3个字符
who | cut -b 3
#截取第3,4,5,7个字符串
who | cut -b 3-5,7
#截取第3个字符至末尾的字符串
who | cut -b 3-

(2)指定分隔符(-d),取指定片段的字符串(-f)

##只能指定单个字符为分隔符
#以冒号为分隔符,取第一列
head /etc/passwd | cut -d : -f 1
#以冒号为分割符,取第2,4,6列
head /etc/passwd | cut -d : -f 2,4-6
#以单个空格为分隔符
who | cut -d ' ' -f 1
##cut默认制表符为分隔符。可使用sed语句判断不确定的空白是制表符还是空格
printf 'a b\n' | sed -n l
printf 'a\tb\n' | sed -n l
printf 'a\tb\n' | cut -f 1

5、sort

  • 主要功能:对单列字符串排序
  • head /etc/passwd | cut -d : -f 1 | sort # -r 逆序 head /etc/passwd | cut -d : -f 1 | sort -r # -u 去重 who | cut -d ' ' -f 1 | sort -u # -n 按数值排序 head /etc/passwd | cut -d : -f 4 | sort -n #按照某一列(-t指定分隔符)顺序调整每行的顺序;输出仍为行文本内容 head /etc/passwd | sort -n -t ':' -k 4

    6、uniq

  • 主要功能:搭配sort计算频率
  • #uniq只会对相邻的重复值进行去重处理
    head /etc/passwd | cut -d : -f 4 | uniq 
    head /etc/passwd | cut -d : -f 4 | sort | uniq 
    # -c 统计频数
    head /etc/passwd | cut -d : -f 4 | sort | uniq -c 
    #按频数排序
    head /etc/passwd | cut -d : -f 4 | sort | uniq -c | sort -n 
    # -d 只显示有重复的行
    head /etc/passwd | cut -d : -f 4 | sort | uniq -dc
    

    7、tr

  • 主要功能:单个字符一一替换
  • who | tr 'abc' '123'
    who | tr 'a-z' 'A-Z'
    #替换分隔符
    head /etc/passwd | tr ':' ','
    head /etc/passwd | tr ':' '\t'
    #单个字符删除 -d
    who | tr -d 'a-z'
    who | tr -d 'a'
    

    8、cat,paste,join

  • cat:纵向合并文件
  • cat f1.txt f2.txt > f3.txt
    
  • paste:横向合并文件
  • paste f1.txt f2.txt 
    # -d 可指定分隔符
    paste -d ',' f1.txt f2.txt
    #每两行合并为一行,以制表符为分隔符
    cat f1.txt | paste - -
    

    此外 join 可按公共列纵向合并文件。类似R中join系列函数