awk输出指定列

  1. awk '{print $0}' file #打印所有列
  2. awk '{print $1}' file #打印第一列
  3. awk '{print $1, $3}' file #打印第一和第三列
  4. cat file | awk '{print $3, $1}' #打印第三列和第一列,注意先后顺序。
  5. cat file | awk '{print $3, $NF}' #打印第三列和最后一列
  6. awk -F ":" '{print $1, $3}' #以“:”为分隔符分割列,然后打印第一列和第三列

如果我想打印N列之后的所有列,该怎么办?
去网上查找了一下,答案众多,现收集整理如下:
原理:把不想打印出来的某列或某几列赋值为空,然后打印剩余的列。
打印除了第n列以外其它的列:
awk '{ $n=""; print $0 }' test.txt
打印除了第1至第n列以外的其它列:
awk '{ for(i=1; i<=n; i++){ $i="" }; print $0 }' test.txt
打印第一列和第五列以后的列:
awk -F ',' '{if(NF >= 5) {printf $1"\t"; for(i=5;i<=NF;i++) printf $i;printf "\n"}}' 1.txt > 2.txt

主要参考于:https://blog.csdn.net/imliuqun123/article/details/82978675

AWK使用shell的变量

  1. CpGs_mincov=3
  2. cat file | awk -v mincov=$CpGs_mincov '{if($4+$5>=mincov) print}' >outputfile

注:

  • 在awk中变量的引用不需要加 $,而是直接引用;
  • awk会自动识别变量是否为数值类型。

NR、FNR、NF、$NF、FS、OFS的说明

一、NR和FNR
1.释义
NR: 表示当前读取的行数
FNR:当前修改了多少行

2.举例
比如现在AWK处理到第五行。第一行没有进行操作,2,3,4,5行进行了操作,那么NR=5,FNR=4
NR==FNR 表示从起始行到当前行,awk都进行了操作,比如修改,添加等等 ;

二、NF和$NF
1.释义
NF:浏览记录的域的个数
$NF: 最后一个列,输出最后一个列的内容
2.举例
[root@vshi-template shell]# pwd
/root/guanyy/scripts/shell
[root@vshi-template shell]# echo $PWD|awk -F/ ‘{print $NF}’
shell
[root@vshi-template shell]# echo $PWD|awk -F/ ‘{print NF}’
5

三、FS和OFS
1.释义
FS:指定列分隔符,当FS为空的时候,awk会把一行中的每个字符,当成一列来处理。
OFS:列输出分隔符