首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用awk连接两个文件时,如何打印不匹配列的值?

当使用awk连接两个文件时,可以使用awk的内置函数NR和FNR来打印不匹配列的值。

在awk中,NR表示当前处理的行数,FNR表示当前文件中的行数。当awk处理多个文件时,FNR会在每个文件中重新计数,而NR会一直累加。

假设我们有两个文件file1.txt和file2.txt,它们的内容如下:

file1.txt:

代码语言:txt
复制
1 apple
2 banana
3 orange
4 mango

file2.txt:

代码语言:txt
复制
1 red
2 yellow
3 orange
5 green

我们想要连接这两个文件,并打印file1.txt中不匹配的行。可以使用以下命令:

代码语言:txt
复制
awk 'NR==FNR{a[$1]=$0; next} !($1 in a){print}' file1.txt file2.txt

解释:

  • NR==FNR{a[$1]=$0; next}:当处理第一个文件file1.txt时,将file1.txt的第一列作为键,整行作为值存储在数组a中。
  • !($1 in a){print}:当处理第二个文件file2.txt时,如果file2.txt的第一列不在数组a中,则打印该行。

运行以上命令,输出结果为:

代码语言:txt
复制
5 green

这是因为file2.txt中的第一列5在file1.txt中没有匹配。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 腾讯云计算服务:https://cloud.tencent.com/product/cvm
  • 腾讯云数据库服务:https://cloud.tencent.com/product/cdb
  • 腾讯云对象存储服务:https://cloud.tencent.com/product/cos
  • 腾讯云人工智能服务:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发服务:https://cloud.tencent.com/product/mobdev
  • 腾讯云区块链服务:https://cloud.tencent.com/product/baas
  • 腾讯云元宇宙服务:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

生信人自我修养:Linux 命令速查手册(全文引用)

只有一个文件,相当于显示所有文件内容 cat file1 file2 # 合并file1和file2内容,并在屏幕上输出 cat R1.fq.gz R2.fq.gz # 可以合并gzip...1行,显示从第2行开始所有行,可用于跳过文件标题行 tail -f file # 文件内容还在增加,实时显示末尾增加内容,常用于查看日志文件更新情况 wc - 统计文件内容 wc -l file...'{print $2}' file # 打印第二 awk '{print $NF}' file # 打印最后一 awk '{print $(NF-1)}' file#打印倒数第二 awk -F...';' -v OFS='\t' '{print $1,$2,$NF}' file # 读入文件以逗号;分隔打印第1,第2和最后一,并且打印以制表符作为分隔符 number=10;awk...-v n=$number '{print n}' file # number被传给了程序变量n awk '$2 > 100' file # 打印第2大于100awk 'NR>1 && NR

3.9K40

生信人自我修养:Linux 命令速查手册

只有一个文件,相当于显示所有文件内容 cat file1 file2 # 合并file1和file2内容,并在屏幕上输出 cat R1.fq.gz R2.fq.gz # 可以合并gzip...1行,显示从第2行开始所有行,可用于跳过文件标题行 tail -f file # 文件内容还在增加,实时显示末尾增加内容,常用于查看日志文件更新情况 wc - 统计文件内容 wc -l...'{print $2}' file # 打印第二 awk '{print $NF}' file # 打印最后一 awk '{print $(NF-1)}' file#打印倒数第二 awk -F...';' -v OFS='\t' '{print $1,$2,$NF}' file # 读入文件以逗号;分隔打印第1,第2和最后一,并且打印以制表符作为分隔符 number=10;awk...-v n=$number '{print n}' file # number被传给了程序变量n awk '$2 > 100' file # 打印第2大于100awk 'NR>1 && NR

7.4K22
  • 如何awk 删除文件重复行【Programming】

    了解如何排序或更改其顺序情况下使用awk'!visited $ 0 ++'。 [jb0vbus7u0.png] 假设您有一个文本文件,并且需要删除它所有重复行。...对于文件每一行,如果行出现次数为零,则将其增加一并打印该行,否则,它仅增加出现次数而无需打印该行。 我对awk并不熟悉,所以我想了解它是如何通过这么短脚本来实现这一点。...visited [ $0]访问存储在映射中,其键值等于$0(正在处理行),也称为匹配项(我们将会在下面设置)。 取非(!):在awk中,任何非零数字或任何非空字符串均为true 。...否则,执行操作,也不打印任何内容。 为什么不使用 uniq 命令? uniq命令仅除去相邻重复行 。...abc ghi def xyz klm 参考资料 Gnu awk 用户指南 awk数组 Awk真值 Awk 表达式 如何在Unix中删除文件重复行? 删除重复行而排序 awk '!

    8.7K00

    Linux awk 命令

    两个功能是Bell实验室版awk扩展功能,在标准awk中不适用。...但有以下限制,不识别:/x、函数关键字、func、换码序列以及fs是一个空格,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。...~匹配正则表达式和匹配正则表达式 >= != ==关系运算符空格连接+ -加,减* / %乘,除与求余+ - !...如果为真,则进行忽略大小写匹配NF一条记录字段数目NR已经读出记录数,就是行号,从1开始OFMT数字输出格式(默认是%.6g)OFS输出记录分隔符(输出换行符),输出用指定符号代替换行符...ORS输出记录分隔符(默认是一个换行符)RLENGTH由match函数所匹配字符串长度RS记录分隔符(默认是一个换行符)RSTART由match函数所匹配字符串第一个位置SUBSEP数组下标分隔符

    4.1K20

    30 分钟包你学会 AWK

    --lint[=fatal] 选项 该选项允许检查程序兼容性或者模棱两可代码,提供参数 fatal时候,它会对待Warning消息作为Error。 ?...在文件marks.txt中,第三包含了科目名,第四则是得分,上面的例子中,我们只打印出了这两,$3 和 $4 代表了输入记录中第三和第四个字段。...打印所有的行 默认情况下,AWK打印出所有匹配模式行 ? 打印匹配模式 模式匹配成功,默认情况下AWK打印该行,但是也可以让它只打印指定字段。...字符串连接操作符 ? 数组成员操作符 ? 正则表达式操作符 正则表达式操作符使用 ~ 和 !~ 分别代表匹配匹配。 ?...我们可以使用close函数关闭双向管道to或者from一端,这两个字符串告诉gawk发送数据到协同进程完成时或者从协同进程读取完毕关闭管道。

    1.1K30

    30 分钟包你学会 AWK

    --help 选项 打印帮助信息. --lint[=fatal] 选项 该选项允许检查程序兼容性或者模棱两可代码,提供参数 fatal时候,它会对待Warning消息作为Error。...在文件marks.txt中,第三包含了科目名,第四则是得分,上面的例子中,我们只打印出了这两,$3 和 $4 代表了输入记录中第三和第四个字段。...打印所有的行 默认情况下,AWK打印出所有匹配模式打印匹配模式 模式匹配成功,默认情况下AWK打印该行,但是也可以让它只打印指定字段。...赋值操作符 关系操作符 逻辑操作符 三元操作符 一元操作符 指数操作符 字符串连接操作符 数组成员操作符 正则表达式操作符 正则表达式操作符使用 ~ 和 !~ 分别代表匹配匹配。...我们可以使用close函数关闭双向管道to或者from一端,这两个字符串告诉gawk发送数据到协同进程完成时或者从协同进程读取完毕关闭管道。

    1.1K70

    详解Linux三剑客之awk

    比如: 我想取/etc/passwd文件中第五($5)这一查找匹配mail字符串行,这样就需要用另外两个匹配操作符。并且awk里面只有这两个操作符来匹配正则表达式。...=FNR处理是第二个文件. 注意:两个文件NR(行数)不同时候,需要把行数多放前边. 解决方法:把行数多文件放前边,行数少文件放后边....匹配AA打印出YES,反之,打印出“NO YES” 2.3 next用法 如上题,用next来实现 next :跳过它后边所有代码 [root@creditease awk]# awk '$0~...如果符合$0~/AA/则打印YES ,遇到next后,后边动作执行;如果不符合$0~/AA/,会执行next后边动作; next前边(模式匹配),后边就不执行,前边执行(模式匹配),后边就执行...Other2: don't care 解析:使用正则匹配匹配到'/^Desc.*:$/,就使用printf打印(不换行),匹配打印出整行。

    1.2K30

    shell学习教程(超详细完整)

    n"}’ student.txt #awk命令只要检测不到完整单引号不会执行,所以这个命令换行不用加入“|”,就是一行命令 #这里定义了两个动作 #第一个动作使用BEGIN条件,所以会在读入文件数据前打印...#打印Liming成绩 使用df命令查看分区使用情况是,如果我只想查看真正系统分区使用状况,而不想查看光盘和临时分区使用状况,则可以: 例子2: [root@localhost ~]$ df...awk常用统计实例 1、打印文件第一(域) : awk '{print $1}' filename 2、打印文件前两(域) : awk '{print $1,$2}' filename...3、打印完第一,然后打印第二awk '{print $1 $2}' filename 4、打印文本文件总行数 : awk 'END{print NR}' filename 5、打印文本第一行...程序是多行时候,使用外部脚本是很适合。首先在外部文件中写好脚本,然后可以使用awk-f选项,使其读入脚本并且执行。

    6.2K21

    文本处理三驾马车之 awk

    ,也可以是正则表达式 常用参数 -F value 设置域分隔符,相当于给 FS 内置变量赋值 -v var=value 将变量 value 赋给程序变量 var,-v 可以多次使用 记录与字段 记录是一次读入内容...中语言中,通常测试一个记录、字段或字符串是否与一个正则表达式匹配匹配返回 1,匹配返回 0。...正则表达式用两个反斜杠/包围。 expr ~ /r/ # 评估expr是否与r匹配匹配意思是expr一个子串是否在正则表达式r定义字符串集中。...,$NF}' file # 读入文件以逗号;分隔打印第1,第2和最后一,并且打印以制表符作为分隔符 number=10;awk -v n=$number'{print n}' file...# number被传给了程序变量n awk '$2 > 100' file # 打印第2大于100awk 'NR>1 && NR<4' file # 打印第2~3行 awk

    16610

    简明AWK实战教程

    a.txt AWK输出文本中内容 下面我们进行一个具有实际使用价值命令: df命令 如果我们只想打印第2数据: AWK输出指定内容 AWK是逐行处理格式化文本数据,逐行意思是,AWK...当我们指定文本内容分割符时候,awk默认把每一行文本内容按照空格进行划分为存在多个连续空格当做一个分割)。...我们构建一个格式化txt文本,内容如下: 文本内容 我们可以输出文本第一、第二数据: AWK输出指定内容 针对某些存在字段缺失,AWK并不会报错,而是输出空。...,"端口号”}’ test.txt BEGIN模式 awk会首先指定BEGIN模式指定命令,打印两个字符串,并不会操作test.txt文件。...*AWK统计文件中某关键词出现次数 1、统计文件test.txt中第2不同出现次数 awk '{sum[$2]+=1}END{for(i in sum)print i"\t"sum[i]}' test.txt

    1.7K30

    linux基础命令介绍八:文本分析 awk

    pattern省略表示匹配任何字符串;action省略表示执行'{print}';它们不可以同时省略。...对于每条记录,awk使用分隔符将其分割成,第一用$1表示,第二用$2表示...最后一用$NF表示 选项-F表示指定分隔符 如输出文件/etc/passwd第一行第一(用户名)和最后一(登录shell...在一些情况下,使用awk过滤甚至比使用grep更灵活 如获得ifconfig输出中网卡名及其对应mtu [root@idc-v-71253 ~]# ifconfig|awk '/^\S/{print...FILENAME 当前输入文件名字 awk中还可以使用自定义变量,如将网卡名赋值给变量a,然后输出网卡名及其对应RX bytes(注意不同模式匹配及其action写法): [root@...读取第二个文件,NR==FNR不成立,执行后面的打印命令 sub(regex,substr,string)替换字符串string(省略为$0)中首个出现匹配正则regex子串substr [root

    1.4K20

    intermediate awk 脚本指南【Linux-Command line】

    了解如何将命令构造为可执行脚本。 01.png 本文探讨了awk功能,它们更简单易用,只要你知道如何将命令结构化为可执行脚本。...例如,要选择和仅打印第二中具有字符串“ purple”且第三中少于五记录: 02.png 如果记录在第二中具有“purple”,但在第三中具有大于五,则该记录不会被选中。...同样,如果一条记录符合第三要求,但在第二中缺少“purple”,则该记录也不会被选中。 Next命令 假设你要选择文件中数量大于或等于8每条记录,并打印带有两个星号(**)匹配记录。...以此为例: 03.png BEGIN命令 使用BEGIN命令可以在awk开始扫描文本文件之前打印和设置变量。 例如,你可以通过在BEGIN语句中定义awk脚本来设置输入和输出字段分隔符。...你可以在声明其类型情况下随意创建它们,并任意为其添加值。 在循环结束,脚本将各个记录加在一起,并打印总数。

    1.4K30

    使用awk过滤行

    Chr它等于 6 从(第 7 )获取行,并且Pos当值在 11000000 和 25000000 之间从(第 8 )获取行。...我们通过管道将其传递给,uniq因为默认行为将打印每行数,并且由于每行具有相同数,因此uniq会将其减少为一个数字。 打印字段和搜索 我们还可以使用 awk来选择和打印文件一部分。...请注意,如果你指定要打印哪些字段,awk将默认打印与搜索匹配整行。...在这种情况下,awk 将返回与模式匹配每一行。在我们上面的例子中,这个数字在数据文件中出现一次,但我们可以使用正则表达式或范围模式来代替。...有关在 awk 中查找模式更多信息,请查看awk 指南模式、操作和变量部分。 根据字段过滤行 现在我们知道如何访问字段()并在我们文档中查找模式,但是我们如何控制要搜索内容和位置?

    3.4K20

    Linux Awk用法总结

    program一般多个pattern和action序列组成,读入记录匹配pattern,才会执行相应action命令。...记录匹配某个pattern,才会执行后续action命令。...我们用实际例子来解释这个区别,假设有两个文件:a和b,它们内容分别如下所示: 为了说明赋值操作发生时机,我们在BEGIN,正常处理,END三个地方都打印变量。...表示匹配: 除了BEGIN和END这两个特殊模式外,其余模式都可以使用’&&’或者’ ’运算符组合,前者表示逻辑与,后者表示逻辑或: 前面的正则都是整行匹配,有时候仅仅需要匹配某个字符,这样我们可以用表达式...awk处理完一个文件之后,它会从ARGV下一个元素获取参数,如果是一个文件则继续处理,如果是一个变量赋值则执行赋值操作: 当下一个元素为空,则跳过处理,这样可以避开处理某个文件: 上面的例子中a

    6.6K40

    资源 | 简单快捷数据处理,数据科学需要注意命令行

    现在多数文件都是 UTF-8 编码,然而有时候我们拿到文件并不是这个格式。这可能导致交换编码格式一些不靠谱尝试。...split -a 生成长度为 N 后缀 split -x 使用十六进制后缀分割 SORT & UNIQ(sort:文件排序;uniq:报告或忽略文件重复行,与 sort 结合使用) 这两个命令提供了唯一单词计数...JOIN(连接并合并文件) join 命令是一个简单、拟正切 SQL。最大区别在于 join 将返回所有,并且只能在一个字段上进行匹配。默认情况下,join 将尝试使用第一作为匹配键。...: alias grep="grep --color=auto" 使 grep 色彩化 grep -E 使用扩展正则表达式 grep -w 只匹配全字符 grep -l 打印匹配文件名 grep...awk '/word/' filename.csv 或者使用一些技巧将 grep 和 cut 结合起来。这里,对于所有我们要查找 word 行,awk 打印第三和第四和分隔符。

    1.5K50
    领券