awk是一款不錯的工具了我們可以利用awk來進行篩選了下面我們一起來看一篇關于awk排除某列輸出一個命令操作方式,具體的如下。
awk工具在文本處理上非常強大,我們常用的用法是選擇某列輸出,如PRint $1,$3 。不過在特殊的情況下,也會遇到只排除例個某列,其他列都正常輸出 。針對 awk排除某列,這里就做個小總結。 比如我的文件如下:
[root@361way tmp]# more disk_ioxvda 1.49 2.37 11.71 10615426 52410436xvdb 3.50 6.60 80.08 29535297 358410976xvda 0.00 0.00 0.00 0 0xvdb 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/bashawk -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/bashawk -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
|
新聞熱點
疑難解答