awk输出指定列
awk '{print $0}' file #打印所有列
awk '{print $1}' file #打印第一列
awk '{print $1, $3}' file #打印第一和第三列
cat file | awk '{print $3, $1}' #打印第三列和第一列,注意先后顺序。
cat file | awk '{print $3, $NF}' #打印第三列和最后一列
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的变量
CpGs_mincov=3
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:列输出分隔符