如何将csv中的四列与awk进行比较?

如何将csv中的四列与awk进行比较?,awk,Awk,这是我们的后续问题 我有两个csv文件需要与一列进行比较 我的member.csv文件如下所示: ID|lastName|firstName|pubID 01|Lastname01|Firstname01|pubID01 02|Lastname02|Firstname02|pubID02 03|Lastname03|Firstname03|pubID03 Lastname01|Name01|pubID01|Hash01 Lastname02|Name02|pubID02|Hash02a Las

这是我们的后续问题

我有两个csv文件需要与一列进行比较

我的
member.csv
文件如下所示:

ID|lastName|firstName|pubID
01|Lastname01|Firstname01|pubID01
02|Lastname02|Firstname02|pubID02
03|Lastname03|Firstname03|pubID03
Lastname01|Name01|pubID01|Hash01
Lastname02|Name02|pubID02|Hash02a
LastnAme0X|Name03|pubID03|Hash03
Lastname04|Name04|pubID04|Hash04
Lastname02b|Name02|pubID02|Hash02b
Lastname01|Name01|pubID01|Hash01b
第二个文件
check-ID.csv
如下所示:

ID|lastName|firstName|pubID
01|Lastname01|Firstname01|pubID01
02|Lastname02|Firstname02|pubID02
03|Lastname03|Firstname03|pubID03
Lastname01|Name01|pubID01|Hash01
Lastname02|Name02|pubID02|Hash02a
LastnAme0X|Name03|pubID03|Hash03
Lastname04|Name04|pubID04|Hash04
Lastname02b|Name02|pubID02|Hash02b
Lastname01|Name01|pubID01|Hash01b
-->
Lastname04
不在my
member.csv

我想检查
check-ID.csv
的第一列的值是否等于
member.csv
中第二列的值,或者
check-ID.csv
的第四列的值是否等于
member.csv

我的尝试是

awk 'BEGIN{  FS="|"} FNR==NR{  a[$2]; b[$4]; next }($1 in a  || $3 in b) ' member.csv check-ID.csv  | sort -t'|' -k1
但很明显,我没有得到正确的条件

我希望得到一个经过筛选和排序的输出,这样只有成员才会像下面这样列出:

Lastname01|Name01|pubID01|Hash01
Lastname01|Name01|pubID01|Hash01b
Lastname02|Name02|pubID02|Hash02a
Lastname02b|Name02|pubID02|Hash02b
LastnAme0X|Name03|pubID03|Hash03

感谢您的帮助

请您尝试以下内容,仅使用显示的样本编写和测试

awk '
BEGIN{
  FS="|"
}
{  gsub(/\r/,"")  }
FNR==NR{
  a[$2]
  b[$4]
  next
}
($1 in a) || ($3 in b)
' members.csv  check-ID.csv |
sort -t'|' -k1
说明:添加上述内容的详细说明

awk '                              ##Starting awk program from here.
BEGIN{                             ##Starting BEGIN section of this program from here.
  FS="|"                           ##Setting field separator as | here.
}
{  gsub(/\r/,"")  }                ##Globally substituting all control M characters in all lines.
FNR==NR{                           ##Checking condition if FNR==NR which will be TRUE when members.csv is being read.
  a[$2]                            ##Creating array a with index of 2nd field.
  b[$4]                            ##Creating array b with index of 4th field here.
  next                             ##next will skip all further statements from here.
}
($1 in a) || ($3 in b)             ##For check-ID.csv Input_file checking condition if either 1st field is present in a OR 3rd field is present in b then print that line.
' members.csv  check-ID.csv |      ##Mentioning Input_file names here.
sort -t'|' -k1                     ##Sending output of awk code to sort command and sorting it by first field with setting field separator as | for all lines.

@卢卡斯,这对我很有效。您能通过对两个文件执行
cat-v Input\u file
检查您的输入文件是否有控制M字符,然后告诉我吗?除了一些“Umlauts”之外,该文件似乎很好,我看不到控制M字符。我的实际成员文件中的pubID在第6列,但我将
b[$4]
更改为
b[$6]
进行测试。@LukasCB,IMHO的答案始终仅根据显示的样本给出。您的示例在成员文件中显示其第2和第4个字段,其他示例显示其第1和第3个字段。如果您的实际文件中的字段号不相同,则相应地更改它们,这样应该会飞起来。