我试图做AWK一个文件比较比较列时返回空白的比赛,但它似乎是返回所有的行,而不是仅仅满足由于空白字符匹配的线AWK以CSV
awk -F "," 'NR==FNR{a[$2];next}$6 in a{print $6}' file1.csv fil2.csv
如何我指示awk不要匹配空格?
我得到类似如下:
cccs
dert
ssss
assak
我试图做AWK一个文件比较比较列时返回空白的比赛,但它似乎是返回所有的行,而不是仅仅满足由于空白字符匹配的线AWK以CSV
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:]]+/
是的,没错。增加了可以处理0和空白的替代方案。 – karakfa
我正在处理敏感数据,所以这不是一个选项。 – user1776732
我不确定有多少选项可用来创建空白的示例。 – user1776732
考虑像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)
。等等......
以上未经测试当然,因为没有提供可测试的样品输入/输出。
您的问题包括简洁,可测试的样本输入和预期输出。 –