gpt4 book ai didi

linux - 根据另一个文件的输入在第一个字段中搜索文件并将结果传送到新文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:04 25 4
gpt4 key购买 nike

我有一个如下的输入文件

 Model related text
Model specifications
*ELEMENT_SHELL
$# eid pid n1 n2 n3 n4 n5 n6 n7 n8
76737 1 79322 79323 79324 79511 0 0 0 0
76738 1 79510 79203 79204 79512 0 0 0 0
76739 1 79511 79324 79325 79513 0 0 0 0
76740 1 79512 79204 79205 79514 0 0 0 0
76741 1 79514 79205 79206 79515 0 0 0 0
76742 1 79515 79206 79207 79516 0 0 0 0
76743 1 79516 79207 79208 79517 0 0 0 0
76744 1 79517 79208 79209 79518 0 0 0 0
76745 1 79518 79209 79210 79519 0 0 0 0
76746 1 79519 79210 79211 79520 0 0 0 0

在另一个文件文件 2 中,我只有像这样的数字

 76737    
76738
76739
76740
76741

我必须将 File2.txt 中的每个数字与 File1.txt 第一行中的数字进行比较,如果匹配,则 File1.txt 中的完整行将输出到 model.txt输出将是

 Model related text
Model specifications
*ELEMENT_SHELL
$# eid pid n1 n2 n3 n4 n5 n6 n7 n8
76737 1 79322 79323 79324 79511 0 0 0 0
76738 1 79510 79203 79204 79512 0 0 0 0
76739 1 79511 79324 79325 79513 0 0 0 0
76740 1 79512 79204 79205 79514 0 0 0 0
76741 1 79514 79205 79206 79515 0 0 0 0

有人可以建议我使用 AWK、SED 等吗?

最佳答案

这可以使用 awk 轻松完成

awk 'FNR==NR{ value[$1]; next} $1 in value || FNR < 5' 

测试

$ awk 'FNR==NR{ value[$1]; next} $1 in value || FNR < 5' file2 file1
Model related text
Model specifications
*ELEMENT_SHELL
$# eid pid n1 n2 n3 n4 n5 n6 n7 n8
76737 1 79322 79323 79324 79511 0 0 0 0
76738 1 79510 79203 79204 79512 0 0 0 0
76739 1 79511 79324 79325 79513 0 0 0 0
76740 1 79512 79204 79205 79514 0 0 0 0
76741 1 79514 79205 79206 79515 0 0 0 0

如果您对输出中的前导标题不感兴趣,脚本可以进一步简化为

awk 'FNR==NR{ value[$1]; next} $1 in value' file2 file1
76737 1 79322 79323 79324 79511 0 0 0 0
76738 1 79510 79203 79204 79512 0 0 0 0
76739 1 79511 79324 79325 79513 0 0 0 0
76740 1 79512 79204 79205 79514 0 0 0 0
76741 1 79514 79205 79206 79515 0 0 0 0

它有什么作用?

  • FNR==NR 检查从当前文件读取的记录数是否等于读取的记录总数。基本上这只对第一个文件求值为 true,这里是 file2

  • 值[$1]; next 创建一个由 $1 索引的关联数组,file2

  • 中的值
  • $1 in value 检查列 1 是否存在于关联数组中


编辑

只打印第一次出现的地方。

您可以使用 delete 在打印该行后从关联数组中删除该条目。这确保不会为第二次出现打印该行。

awk 'FNR==NR{ value[$1]; next} $1 in value{ print; delete value[$1] }' 

关于linux - 根据另一个文件的输入在第一个字段中搜索文件并将结果传送到新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28413684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com