首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash-shell在从另一个文件中匹配一个文件后,同时打印匹配内容和不匹配内容。

Bash-shell在从另一个文件中匹配一个文件后,同时打印匹配内容和不匹配内容。
EN

Stack Overflow用户
提问于 2017-12-05 02:33:15
回答 1查看 28关注 0票数 1
代码语言:javascript
复制
cat fiel1.txt
cheng 600
huang 500
pan 400
yin 300

cat file2.txt
600 a
300 c

在我执行完

代码语言:javascript
复制
awk 'NR==FNR{a[$1]=$2;next}($2 in a){print $1,$2,a[$2]}' f2.txt f1.txt

结果如下:

代码语言:javascript
复制
cheng 600 a
yin 300 c

我还想打印不在数组a中的列。如下所示:

代码语言:javascript
复制
cheng 600 a
huang 500
pan 400
yin 300 c

我怎么才能得到结果。我试着命令如下:

代码语言:javascript
复制
awk 'NR==FNR{a[$1]=$2;next}($2 in a){print $1,$2,a[$2]}($2 not in a){print $1,$2,a[$2]}' f2.txt f1.txt

但失败了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-05 02:42:06

代码语言:javascript
复制
$ awk 'NR==FNR{a[$1]=$2;next} {if($2 in a)print $1,$2,a[$2]; else print $1,$2}' f2.txt f1.txt
cheng 600 a
huang 500
pan 400
yin 300 c

讨论

你有:

代码语言:javascript
复制
($2 in a){print $1,$2,a[$2]}

只有在$2a中时,才会打印。我们将其替换为:

代码语言:javascript
复制
if($2 in a)print $1,$2,a[$2]; else print $1,$2

这个打印$1,$2,a[$2]$2a中。否则,它只打印$1,$2

简单版

如果您介意一些无关的尾随空白,我们可以使用更简单的:

代码语言:javascript
复制
$ awk 'NR==FNR{a[$1]=$2;next} {print $1,$2,a[$2]}' f2.txt f1.txt
cheng 600 a
huang 500 
pan 400 
yin 300 c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47645177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档