我正在使用带有 bash shell 的 Amazon Linux。我有一个包含逗号分隔数据的文件,其中每一行如下所示
2049,576804C7DF554416A9EA25B2A5A81514,X,
然后我有第二个文件,其中包含逗号分隔的数据,其中每一行如下所示
id,user_name,user_email
第二个文件中的每一行都是唯一的。我的问题是,如何获取第一个文件中的每一行,并用第二个文件中的匹配数据替换第二个令牌(基于将第一个文件中的第二个令牌与第二个文件中的第一个令牌匹配)?例如,我上面列出的留置权将变成
2049,576804C7DF554416A9EA25B2A5A81514,username1,email1,X,
假设“576804C7DF554416A9EA25B2A5A81514”可以位于第二个文件中。
答案1
像下面的脚本一样,使用gawk
#!/bin/bash
gawk -F, 'tbl[$1]!=""{$2=tbl[$1];OFS=",";print;next}{tbl[$1]=$2;}' $1 $2
您首先传入带有令牌文件的两个文件。这假设第一个文件没有任何重复,并且如果第二个文件有任何额外的行,其中第一个字段在第一个文件中没有匹配项,则这些行将从输出中省略。
该gawk
程序从第一个文件构建关联数组tbl
,由第一个字段索引,然后使用它替换第二个文件的第二个字段,然后打印带有替换的行并使用“,”作为字段分隔符。请参阅man gawk
了解更多详情。