加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

awk – 在单独的文件中匹配数据

发布时间:2020-12-13 23:09:43 所属栏目:Linux 来源:网络整理
导读:我似乎有几个这类问题,并且真正试图在我自己的基础上解决这个问题而没有成功. 我有两个数据文件;我想比较它们的第一个字段,并从输出文件中第一个文件的匹配条目旁边的第二个文件中打印该行.保持文件1中的列表顺序很重要,包括没有匹配的行.这些文件是制表符分
我似乎有几个这类问题,并且真正试图在我自己的基础上解决这个问题而没有成功.

我有两个数据文件;我想比较它们的第一个字段,并从输出文件中第一个文件的匹配条目旁边的第二个文件中打印该行.保持文件1中的列表顺序很重要,包括没有匹配的行.这些文件是制表符分隔值,但我可以根据需要更改它们(尽管数据中使用了逗号).

FILE1.TXT

37600
39219
32887
01262
69241
00361
34180
42385
69245

FILE2.TXT

37600       GEAR PUMP   1
32887       MOTOR,480V 1
34180       BRACKET 2
00361       WASHER  4
42385       SCREW       8

期望的输出文件

37600       GEAR PUMP   1
39219
32887       MOTOR,480V 1
01262
69241
00361       WASHER  4
34180       BRACKET 2
42385       SCREW       8
69245

到目前为止,这是我的最大努力,但它会导致一个空文件.

awk NR==NFR{a[$1];next}$1 in a {print $0} file1.txt file2.txt > outfile.txt

任何帮助将不胜感激.

解决方法

你很亲密,这个awk应该这样做.

awk 'FNR==NR {a[$1]=$0;next} a[$0] {$0=a[$0]}1' file2 file1
37600       GEAR PUMP   1
39219
32887       MOTOR,480V 1
01262
69241
00361       WASHER  4
34180       BRACKET 2
42385       SCREW       8
69245

我将file2存储在数组中,其中$1作为索引.
如果在数组中找到file1中的值,则将其设置为$0并全部打印出来.

您也可以写这个,以标记应该比较的第1列:

awk 'FNR==NR {a[$1]=$0;next} a[$1] {$0=a[$1]}1' file2 file1

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读