linux - awk 比较两个文件中的列,如果在文件 2 中没有看到文件 1 列,则打印文件 1 列 [与此相关的类似帖子被错误地询问]

标签 linux unix awk

例如。文件1

"ACCOUNT_ID","CTN","NAME","GATEWAY_GUID","DEVICE_GUID","CATALOG_ID","FW_VERSION","DATE_CREATED","STATUS_ID","LOCATION_CODE","BAN","Market_Area","State","IMEI","HW_MODEL"


"306875",="9404653975","14-052917 14-052917","313A0B72E3E440DD8687BD681E55FB03","0",="000010000010004","FW: 1.04.122, JVM: Oracle Corporation 1.7.0_72-ea, OS: Linux 2.6.33.5","06/24/2014 14:32:38","0",="0003013034",="177046772949","DLS","TX",="351612051721824","Cisco DLC-100"

"306875",="9404653975","14-052917 14-052917","7EED6EE61F0949EE99554D4D4F09E4FE","ACFF000001",="000010901000004","1.2.14","06/24/2014 21:28:17","0",="",="177046772949","DLS","TX",="351612051721824",""

"306875",="9404653975","14-052917 14-052917","D57DAE988A1C482EA3217312EDC7466E ","ACFF010904",="000010907000004","","12/16/2015 23:39:21","0",="",="177046772949","DLS","TX",="351612051721824",""

文件2

account,ban,ctn,first_name,last_name,device_gateway_guid,device_id,device_cat_id,IMEI,device_fw_vrsn,date_created,device_status,subscription_created,subscription_name,subscription_market,date


DL!813269 , 418069632891 , undefined , MUHAMMAD , ANJUM , 313A0B72E3E440DD8687BD681E55FB03, ACFF010904 , 00010907000004 , 351612054025777 ,  , 2015-12-18 19:45:31 , 0 , undefined , [object Object] , WAS , undefined

DL!782477 , 523266997720 , undefined , SAM , MAURER , 7EED6EE61F0949EE99554D4D4F09E4FE , 0 , 00010000010004 , 351612053801194 , FW: 1.04.122, JVM: Oracle Corporation 1.7.0_72-ea, OS: Linux 2.6.33.5 , 2015-12-18 19:02:27 , 0 , undefined , [object Object] , FLP , 2015-07-29 09:07:22

DL!926875 , 578172109430 , undefined , TRACY , BUSH , C57DTY988A98482EA32173RTY907466E , 0 , 00010000010004 , 351612054481798 , FW: 1.04.122, JVM: Oracle Corporation 1.7.0_72-ea, OS: Linux 2.6.33.5 , 2016-01-23 16:09:21 , 0 , undefined , [object Object] , GLF , 2015-11-06 02:26:31

我想将 file1 的“GATEWAY_GUID”列与 file2 的 device_gateway_guid 列进行比较。输出应该是 file1 中未在 file2 中看到的所有记录。

预期输出 D57DAE988A1C482EA3217312EDC7466E [因为这在file1中可见,但在file2中没有]

例如:如果文件 1 有 10 条记录,文件 2 有 5000 条记录。在 5000 个文件中,有 5 条记录与文件 1 相同。然后我的输出文件应该显示文件 1 中缺少 5 个列值,而这些值在文件 2 中看不到。

最佳答案

两个文件之间不同的引用/间距增加了一个问题,但是 comm 是这里使用的工具,并且输入已正确准备

comm -23 <(awk -F, 'NR > 1 && NF {gsub(/^"|"$/,"",$4);print $4}' file1 | sort) \
         <(awk -F, 'NR > 1 && NF {gsub(/^ | $/,"",$6);print $6}' file2 | sort)
D57DAE988A1C482EA3217312EDC7466E 

-23 选项丢弃共有行 (-3) 和 file2 特有的行 (-2),保留 file1 特有的字段。

关于linux - awk 比较两个文件中的列,如果在文件 2 中没有看到文件 1 列,则打印文件 1 列 [与此相关的类似帖子被错误地询问],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35851630/

相关文章:

linux - Swift 3 预览版 2 Linux 错误 : use of unresolved identifier

linux - CentOS:无法安装 Chromium 浏览器

linux - 如何在 Unix 中通过 find 命令将文件名添加到找到的文件的最后一行

regex - 仅当字符串存在于特定列中时才打印行

linux - 如何在 Linux 中将终端命令输出( float )转换为整数?

linux - shell脚本中top命令特殊字符

unix - 从 Bash 脚本在线程中运行 UNIX 命令

.net - 如何从网络程序集调用shell脚本

unix shell 脚本以获取格林威治标准时间 30 分钟前的日期

awk - 使用 awk 无法查找和计算名称中带有连字符的文本