awk将同一文件中的两列与一列中的字母进行比较

awk将同一文件中的两列与一列中的字母进行比较,awk,Awk,如何在同一文件中进行列匹配。例如,比较服务器和FQDN列。FQDN列有额外的单词,所以我找不到剥离的方法 "server","cpu","memory","disk","FQDN" "host1",4,32,100,"host2.xxx.com" "host2",2,10,20,"host2.xxx.com" "host3",6,4,100,"host1.xxx.com" "host4",2,10,30,"host4.xxx.com" "host5

如何在同一文件中进行列匹配。例如,比较服务器和FQDN列。FQDN列有额外的单词,所以我找不到剥离的方法

    "server","cpu","memory","disk","FQDN"
    "host1",4,32,100,"host2.xxx.com"
    "host2",2,10,20,"host2.xxx.com"
    "host3",6,4,100,"host1.xxx.com"
    "host4",2,10,30,"host4.xxx.com"
    "host5",3,6,32,"host3.xxx.com"

测试长度与
$1
相同的
$5
子字符串:

 awk -F, 'substr( $5, 1, length($1) ) == $1' test.csv
您的“预期结果”显示这些字段不匹配的行。如果这是您想要的,请执行相同的转换,但测试不平等性:

 awk -F, 'substr( $5, 1, length($1) ) != $1' test.csv

测试长度与
$1
相同的
$5
子字符串:

 awk -F, 'substr( $5, 1, length($1) ) == $1' test.csv
您的“预期结果”显示这些字段不匹配的行。如果这是您想要的,请执行相同的转换,但测试不平等性:

 awk -F, 'substr( $5, 1, length($1) ) != $1' test.csv
获取匹配项:尝试以下操作

awk -F'[,.]' '$1==$5'  Input_file
awk -F'[,.]' '$1!=$5' Input_file
获取不匹配项:尝试以下操作

awk -F'[,.]' '$1==$5'  Input_file
awk -F'[,.]' '$1!=$5' Input_file
或要删除输出中的标题,请尝试:

awk -F'[,.]' 'FNR>1 && $1!=$5' Input_file


说明:对于输入文件中的所有行,将字段分隔符设置为
,然后简单地比较
$1
$5
,对于匹配的情况使用
=
条件,对于不匹配的情况使用
=条件。

获取匹配项:尝试以下操作

awk -F'[,.]' '$1==$5'  Input_file
awk -F'[,.]' '$1!=$5' Input_file
获取不匹配项:尝试以下操作

awk -F'[,.]' '$1==$5'  Input_file
awk -F'[,.]' '$1!=$5' Input_file
或要删除输出中的标题,请尝试:

awk -F'[,.]' 'FNR>1 && $1!=$5' Input_file



说明:对于输入文件中的所有行,将字段分隔符设置为
,然后简单地比较
$1
$5
,对于匹配的情况使用
=
条件,对于不匹配的情况使用
=条件。

非常感谢您的回答,我的列在输入文件中确实有双引号,并且在awk中仍有要排除的内容。我可以在awk之前使用sed,但询问是否有通过awk的班轮。输入文件:“服务器”,“cpu”,“内存”,“磁盘”,“FQDN”“主机1”,4,32100,“主机2.xxx.com”“主机2”,2,10,20,“主机2.xxx.com”“主机3”,6,4100,“主机1.xxx.com”“主机4”,2,10,30,“主机4.xxx.com”“主机5”,3,6,32,“主机3.xxx.com”非常感谢您的回答,我的列在输入文件中确实有双引号,并且在awk中无论如何都要排除。我可以在awk之前使用sed,但询问是否有通过awk的班轮。输入文件:“服务器”,“cpu”,“内存”,“磁盘”,“FQDN”“主机1”,4,32100,“主机2.xxx.com”“主机2”,2,10,20,“主机2.xxx.com”“主机3”,6,4100,“主机1.xxx.com”“主机4”,2,10,30,“主机4.xxx.com”“主机5”,3,6,32,“主机3.xxx.com”