我正在尝试在awk中进行文件比较,但它似乎返回所有行而不仅仅是由于空白匹配而匹配的行
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 :(得分: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)
。等等...
由于未提供可测试的样本输入/输出,因此上述情况未经测试。