2017-03-04 18 views
-1

我试图做AWK一个文件比较比较列时返回空白的比赛,但它似乎是返回所有的行,而不是仅仅满足由于空白字符匹配的线AWK以CSV

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

如何我指示awk不要匹配空格?

我得到类似如下:

cccs 
dert 

ssss 


assak 
+0

您的问题包括简洁,可测试的样本输入和预期输出。 –

回答

2

本应该做的

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

,如果你的数据文件包括空间和数字字段,如评论如下更好地检查改变从$2$2!="" && $2!~/[[:space:]]+/

+1

是的,没错。增加了可以处理0和空白的替代方案。 – karakfa

+0

我正在处理敏感数据,所以这不是一个选项。 – user1776732

+0

我不确定有多少选项可用来创建空白的示例。 – user1776732

2

考虑像file2中的$ 2 = <space>foo<space><space>bar,file2中的$ 6 = foo<space>bar<space>这样的情况。

下面是如何稳健file2中比较$ 6对文件1的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=tolower(key)。如果您想使其与标点符号无关,请在第一个gsub()之前加上gsub(/[[:punct:]]/,"",key)。等等......

以上未经测试当然,因为没有提供可测试的样品输入/输出。