比较csv中的列时返回空格匹配的awk

比较csv中的列时返回空格匹配的awk,awk,Awk,我试图在awk中进行文件比较,但由于空格匹配,它似乎返回了所有匹配的行,而不仅仅是匹配的行 awk -F "," 'NR==FNR{a[$2];next}$6 in a{print $6}' file1.csv fil2.csv 如何指示awk不匹配空格 我得到如下结果: cccs dert ssss assak 这应该可以 $ awk -F, 'NR==FNR && $2 {a[$2]; next} $6 in a {print

我试图在awk中进行文件比较,但由于空格匹配,它似乎返回了所有匹配的行,而不仅仅是匹配的行

awk -F "," 'NR==FNR{a[$2];next}$6 in a{print $6}' file1.csv  fil2.csv 
如何指示awk不匹配空格

我得到如下结果:

cccs
dert

ssss


assak
这应该可以

$ awk -F, 'NR==FNR && $2 {a[$2]; next}
           $6 in a       {print $6}' file1 file2
如果您的数据文件包含空格和数字字段,如下面所述,最好将支票从$2更改为$2!=&$2!~/[[:space:][]+/

考虑文件1中的$2=foobar和文件2中的$6=foobar这样的情况

下面介绍了如何将file2中的$6与file1中的$2进行可靠比较,忽略空格差异,只打印没有空或所有空格键字段的行:

awk -F, '
{
    key = (NR==FNR ? $2 : $6)
    gsub(/[[:space:]]+/," ",key)
    gsub(/^ | $/,"",key)
}
key=="" { next }
NR==FNR { file1[key]; next }
key in file1
' file1 file2
如果要使比较不区分大小写,请在第一个gsub之前添加key=tolowerkey。如果要使其独立于标点符号,请在第一个gsub之前添加gsub/[[:punct:]]/,、键。等等


上述内容当然未经测试,因为没有提供可测试的样本输入/输出。

您的问题包括简明、可测试的样本输入和预期输出。是的,对。添加了应处理0和空白的备选方案。我正在处理敏感数据,因此这不是一个选项。我不确定有多少选项可用于创建空白示例。