美文网首页
awk 比较两个文件常用语法

awk 比较两个文件常用语法

作者: PETJO | 来源:发表于2021-01-06 16:17 被阅读0次

1. 制作文件file1, file2, file3, file4, file5;"\t"分隔符;观察文件格式特点

cat > file1
aaa 001 A                                                                         
bbb 002 B
ccc 003 C
ddd 004 D
eee 005 E

cat > file2
aaa 001 A                                                                         
bbb 002 B

cat > file3
aaa                                                                         
bbb 
ccc 
ddd 
  
cat file4
aaa 001 100                                                                         
bbb 002 90
ccc 003 80
ddd 004 70
eee 005 60

cat file5
A   aaa 001 100                                                                       
B   bbb 002 90
C   ccc 003 80
D   ddd 004 70
E   eee 005 60

2. awk是按行读入文件内容的,因此awk按行(字段)比较两个文件的相同行或者不同行

# 1.同时在file1和file2中存在的行
# 逻辑:当文件1时,将文件1按行写入数组;当文件2时,按行判断文件2是否在数组中,如果在,打印该行并输出到common文件。
awk 'BEGIN{FS=OFS="\t"} {if(NR==FNR){array[$0]} else{if($0 in array) {print $0}}}' file1 file2 

awk 'BEGIN{FS=OFS="\t"} {if(ARGIND==1){array[$0]} else{if($0 in array) {print $0}}}' file1 file2

awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$0]} ARGIND==2{if($0 in array) {print $0}}' file1 file2

# 2.只在一个文件中有的行
# 逻辑:当文件1时,将文件1按行写入数组;当文件2时,按行判断文件2是否在数组中,如果在,删除数组中该条记录;打印数组中的值。
awk 'BEGIN{FS=OFS="\t"} {if(NR==FNR){array[$0]} else{if($0 in array) {delete array[$0]}}} END{for(i in array) {print i}}' file1 file2

awk 'BEGIN{FS=OFS="\t"} {if(ARGIND==1){array[$0]} else{if($0 in array) {delete array[$0]}}} END{for(i in array) {print i}}' file1 file2

# 3.比较两个文件一列相同,打印目标行数据,注意构建数组的语法形式多样"++";"next"
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1]} ARGIND==2{if($1 in array){print $0}}' file3 file1

awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1]++} ARGIND==2{if($1 in array){print $0}}' file3 file1

awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1];next} ARGIND==2{if($1 in array){print $0}}' file3 file1

# 4.比较两个文件(列数列号相同),指定多列相同时,打印目标数据
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1,$2];next} ($1,$2) in array' file1 file4

awk 'BEGIN{FS=OFS="\t"} ARGIND==1{a[$1]; b[$2]; next} $1 in a && $2 in b' file1 file4

# 5.比较两个文件(列数列号不相同),指定多列相同时,打印目标数据
awk 'BEGIN{FS=OFS="\t"} ARGIND==1{a[$1]; b[$2]; next} $2 in a && $3 in b' file1 file5

awk 'BEGIN{FS=OFS="\t"} ARGIND==1{array[$1,$2];next} ($2,$3) in array' file1 file5

相关文章

  • awk 比较两个文件常用语法

    1. 制作文件file1, file2, file3, file4, file5;"\t"分隔符;观察文件格式特点...

  • 常用命令(持续更新)

    处理文本常用单行命令,持续更新~1.awk 匹配两个文件内容### Linux Shell中使用awk完成两个文件...

  • Shell大杂烩

    AWK 常用语法:awk -F 'separator' '{pattern + action}' filenam...

  • AWK的使用

    AWK语法: awk -F/f/v/ + ‘pattern’ +文件全路径或者:标准输出|awk -F/f/v/...

  • awk常用命令

    awk在处理文件的时候,常常比编写脚本更加方便,处理速度也更快,下边总结了一些awk的常用用法。 现在新建两个文件...

  • 08_SHELL编程之文本处理工具awk

    课程目标 熟悉awk的命令行模式基本语法结构 ==熟悉awk的相关内部变量== 熟悉awk常用的打印==函数pri...

  • linux中的awk命令详解

    1、AWK简介 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 2、AWK语法 awk [选项参数] ...

  • awk比较两文件(-)

    发现awk比较的时候可以用-代替某一个文件,这样让整个代码更灵活: 取代第一个文件的位置: 这样在提取bam文件的...

  • awk、sed使用

    1 比较两个文件 NR:表示awk开始执行程序后所读取的数据行数。(ALL)FNR:awk当前读取的记录数,其变量...

  • awk命令

    语法结构:awk '条件1{动作1}条件2{动作2}……' 文件名

网友评论

      本文标题:awk 比较两个文件常用语法

      本文链接:https://www.haomeiwen.com/subject/czznoktx.html