我想比较两个文件 file1.txt 和 file2.txt 的前两列,如果它们匹配写入另一个文件 output.txt 与 file1,file 2 的第三列以及是否匹配的详细信息。

文件1.txt

ab|2001|name1
cd|2000|name2
ef|2002|name3
gh|2003|name4

文件2.txt

xy|2001|name5
cd|2000|name6
ef|2002|name7
gh|2003|name8

输出.txt

name1 name5  does not match
name2 name6  matches
name3 name7  matches
name4 name8  matches

#1楼 票数:1 已采纳

欢迎使用堆栈溢出,请您尝试关注并告诉我这是否对您有帮助。

awk -F"|" 'FNR==NR{a[$2]=$1;b[$2]=$3;next} ($2 in a) && ($1==a[$2]){print b[$2],$3,"matched properly.";next} {print b[$2],$3,"Does NOT matched."}' file1.txt file2.txt

编辑:在这里也添加一种非单衬形式的解决方案。

awk -F"|" '
FNR==NR{
   a[$2]=$1;
   b[$2]=$3;
   next
}
($2 in a) && ($1==a[$2]){
   print b[$2],$3,"matched properly.";
   next
}
{
   print b[$2],$3,"Does NOT matched."
}
' file1.txt file2.txt

说明:为上述代码添加说明。

awk -F"|" '                                 ##Starting awk program from here and setting field separator as | here.
FNR==NR{                                    ##Checking condition if FNR==NR which will be TRUE when file1.txt is being read.
   a[$2]=$1;                                ##Creating an array with named a whose index is $2 and value is $1.
   b[$2]=$3;                                ##Creating an array named b whose index is $2 and value is $3.
   next                                     ##next will skip all further statements from here.
}                                           ##Closing BLOCK for FNR==NR condition here.
($2 in a) && ($1==a[$2]){                   ##Checking condition if $2 is in array a AND first field is equal to value of array a value of index $2.
   print b[$2],$3,"matched properly.";      ##Printing array b value with index $2 and 3rd field with string value matched properly.
   next                                     ##next will skip all statements from here.
}                                           ##Closing BLOCK for above condition here.
{
   print b[$2],$3,"Does NOT matched."       ##Printing value of array b with index $2 and 3rd field with string Does NOT matched here.
}
' file1.txt file2.txt                       ##Mentioning Input_file names here.

#2楼 票数:0

你可以使用 paste 和 awk 来获得你想要的。

下面的解决方案假设 file1 和 file2 中的字段将始终由“|”分隔

paste -d "|" file1.txt file2.txt | awk -F "|" '{ if( $1 == $4 && $2 == $5 ){print $3, $6, "matches"} else {print $3, $6, "does not match"} }' > output.txt

  ask by CSP translate from so

未解决问题?本站智能推荐:

2回复

如果两个文件中第一列的内容在Unix中匹配,则打印两个文件的列

我有两个文件如下 代码的命令或代码行应比较两个文件的第一列,并将这些列合并为name|address office|address home ,并在不匹配的地方替换NA,文件内容可能会很大。 全部输出应如下所示 到目前为止,这是我尝试过的: 但是上面的代码行没有合并,只
1回复

比较不同列的两个文件并打印不同列

我想将file2的第二列与file1的第一列进行比较。 如果它们相等,我想将file1的第二列添加到file2 ,如output.txt所示。 文件2 文件1 output.txt的 我可以比较文件 这给出以下输出: 但是我不知道如何将file1的
2回复

如何比较unix中的两个文件以及合并文件1和2(包含匹配数据和不匹配数据)

请让我知道如何比较2个文件以及合并匹配和不匹配的行。 我已经检查了以前提供的所有答案,但没有适合我的要求。请在下面找到示例数据集 file1.csv内容: file2.csv内容: 我已经尝试过以下命令,但在我的情况下不起作用: 输出: 在以上结果中,您可
3回复

比较两列不同的文件,如果匹配则添加新列

我想比较两个文件的前两列,如果匹配则需要打印是否否。 input.txt中 qualified.txt output.txt的 我使用下面的命令来分割数据,然后我将根据结果再添加一列。 现在input.txt有重复(第1列)所以下面的方法不起作用,文件大小也很
2回复

使用join比较unix中的两个文件

我正在研究solaris unix。 我有两个文件: 现在我需要temp2中存在的temp2中的所有行:我遇到了这个并尝试了下面的命令。 这完美地运作了。 然后我也看到了在这里使用join的方式,其中的内容(以及手册页)“默认情况下,当我们没有明确指定字段编号时,join命令
2回复

在键级别(id)比较两个文件,并在列级别显示差异

我正在寻找一种在键级别(id)比较两个文件并在列级别显示更改的方法 输出应如下所示: 尝试在以下位置使用file2用作驱动程序文件来剖析输出,因此它不会打印并忽略id 3的行,因为它不在file2.txt中 ID |描述|名称|日期,匹配 1 |行1 | a | 20
1回复

Unix shell - 通过比较两个文件来查找唯一的列[关闭]

关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善
2回复

比较两个文件的unix并打印数据

我有两个文件看起来像: 文件1: 文件2: 输出应为: 到目前为止尝试过: 任何帮助都会得到帮助