跳转至

awk 不打印某一列的输出

比如一个a文件,内容如下,现在要实现不打印最后一列。

[root@localhost ~]# cat a
a b c
[root@localhost ~]# cat a  | awk '{print $NF}'
c

# 通过设置最后一列为空

[root@localhost ~]# cat a | awk '{$NF="";print$0}'
a b 

# $0 是打印所有列 (数字零)

[root@localhost ~]# cat a | awk '{print $0}'
a b c

# 排除多列

[root@localhost ~]# cat a | awk '{$2="";$NF="";print$0}'
a 
[root@localhost ~]# cat a | awk '{$2="";print$0}'
a c

# 排除多列另一种写法 (等于多次变量赋值)

[root@localhost ~]# cat a | awk '{$2=$NF="";print$0}'
a 

上面可以看到排除的那列变为了一列空列,再用tr(tr是translate缩写)去除空列:

[root@localhost ~]# cat a | awk '{$2="";print$0}'
a c # 中间有空列
[root@localhost ~]# cat a | awk '{$2="";print$0}' | tr -s ' ' ' '
a c # 排除了空列

tr -s参数意思是如果有多个连续相的同字符就合并为1个。

转自

https://www.rootop.org/pages/4470.html