linux中awk排除某列输出的实现示例

    xiaoxiao2021-03-26  23

    linux中awk排除某列输出的实现示例

    awk是一款不错的工具了我们可以利用awk来进行筛选了下面我们一起来看一篇关于awk排除某列输出一个命令操作方式,具体的如下。

    awk工具在文本处理上非常强大,我们常用的用法是选择某列输出,如print $1,$3 。不过在特殊的情况下,也会遇到只排除例个某列,其他列都正常输出 。针对 awk排除某列,这里就做个小总结。 比如我的文件如下:

    [root@361way tmp]# more disk_io xvda 1.49 2.37 11.71 10615426 52410436 xvdb 3.50 6.60 80.08 29535297 358410976 xvda 0.00 0.00 0.00 0 0 xvdb 5.05 12.12 72.73 12 72

    排除第一列(打印第2列到最后):

    awk '{$1=""; print $0}' 文件名

    排除多列:

    awk '{$1=$2=""; print $0}' 文件名

    以上这种写法感觉是比较好的,不过如果前面排除的列比较多,且按顺序过来的,可以使用如下的方法 ,比较方便:

    awk '{for(i=2;i<=NF;i++){printf "%s ", $i}; printf "\n"}' awk '{out=$2; for(i=3;i<=NF;i++){out=out" "$i}; print out}' awk '{print substr($0,length($1)+1);}' awk '{ORS=" "; for(i=4;i<=NF;i++) print $i;print "\n"}' awk '{sub(/([^ ]+ +){3}/,"")}1'

    还有其他一些衍生写法如下:

    awk '{sub(/[^ ]+ /, ""); print $0}' awk '{$1=$2=$3=""}sub("^"FS"*","")' awk -v n=3 '{ for (i=n+1; i<=NF; i++){printf("%s%s",$i,i==NF?RS:OFS);} }'

    也可以通过一个脚本进行引用搞定,如下: 脚本1:

    [root@361way tmp]# cat cols.sh #!/bin/bash awk -v s=$1 '{for(i=s; i<=NF;i++) printf "%-5s", $i; print "" }' # 进行切分操作的命令如下: # cat 文件名 | ./cols.sh 3 # cat 文件名 | ./cols.sh 5

    脚本2: 脚本1还可以做下午简单的修改,变成脚本2,可以指定一个范围,如下:

    #!/bin/bash awk -v s=$1 -v e=$2 '{for(i=s; i<=e;i++) printf "%-5s", $i; print "" }'

    使用命令如下:

    echo "1 2 3 4 5 6 7 8 9 10 11 12 13 14" | ./cols.sh 7 9
    转载请注明原文地址: https://ju.6miu.com/read-661182.html

    最新回复(0)