shell命令之AWK处理多个文件

情到浓时终转凉″ 提交于 2019-12-02 00:46:57

1.先写一个AWK处理多个文件的例子

第一个文件打印第一个字段,第二个文件打印第二字段

方法一:

#!/bin/bash
set -x
file1=$(pwd)"/kk1"
file2=$(pwd)"/kk2"
awk -F' ' '{
        if(FILENAME==ARGV[1]){
           print $1;
        }else{
          print $2;
        }
}' $file1 $file2

方法二:

#!/bin/bash
set -x
file1=$(pwd)"/kk1"
file2=$(pwd)"/kk2"
:<<EOF
awk -F' ' '{
        if(FILENAME==ARGV[1]){
           print $1;
        }else{
          print $2;
        }
}' $file1 $file2
EOF
awk -F' ' '{
        if(NR==FNR){
           print $1;
        }else{
          print $2;
        }
}' $file1 $file2

2.AWK的重要常量

ARGC               命令行参数个数
ARGV               命令行参数排列
FILENAME           awk浏览的文件名

FNR                浏览文件的行数(多个文件时,其值会置1,从新开始计数)
NR                 已读的记录数(多个文件时,其值会连续加1,不会置1)
NF                 浏览记录的域的个数(每列的总行数)

FS                 设置输入域分隔符,等价于命令行 -F选项
OFS                输出域分隔符

ORS                输出记录分隔符
RS                 控制输入记录分隔符
ENVIRON            支持队列中系统环境变量的使用
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。

$NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数

指定输出格式符

 1 #!/bin/bash
 2 set -x
 3 file1=$(pwd)"/kk1"
 4 file2=$(pwd)"/kk2"
 5 
 6 awk -F' 'BEGIN'{
 7             OFS="\t"
 8         }
 9         {
10         if(NR==FNR){
11            print $1;
12         }else{
13           print $2;
14         }
15         print NR,FNR,NF;
16 }' $file1 $file2

 

#!/bin/bash

set -x
file1=$1
file2=$2
cat $file1
awk -F ' ' 'BEGIN{
                OFS="\t";
        }
{
        if(FILENAME==ARGV[1]){
            arr[$1]=$1;
        }
        else{
           if($1 in arr){
              print $1,$2;      
           }
        }

}END{
    for(e in arr){
        print e;
    }
}' $file1 $file2

ps .awk单引号里面的内容需要用双引号

3.AWK内置的常见的函数

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!