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

时间:2017-03-04 20:19:49

标签: awk

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

awk -F "," 'NR==FNR{a[$2];next}$6 in a{print $6}' file1.csv  fil2.csv 

如何指示awk不匹配空格?

我得到以下内容:

cccs
dert

ssss


assak

2 个答案:

答案 0 :(得分:2)

这应该做

$ awk -F, 'NR==FNR && $2 {a[$2]; next}
           $6 in a       {print $6}' file1 file2

如果您的数据文件包含空格和数字字段,请按下面的评论更好地将支票从$2更改为$2!="" && $2!~/[[:space:]]+/

答案 1 :(得分:2)

考虑文件1中的$ 2 = PowerShellGet与文件2中的$ 6 = <space>foo<space><space>bar等案例。

以下是如何稳健地比较file2中的$ 6和file1的$ 2,忽略空白差异,并且只打印没有空或全空白关键字段的行:

foo<space>bar<space>

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

由于未提供可测试的样本输入/输出,因此上述情况未经测试。