2

我是 awk 的新手,需要找到语句来比较下面文件中的两个字段

1.csv
_________
1space, aspace

2,b

space3space,c

2.csv
____________
1space,spacea   

space2,bspace
3,spacecspace

如果 1.tsv 或 2.tsv 的字段中没有前导或训练空格,则以下语句可以正常工作

nawk -F, 'NR==FNR{a[$1,$2]++;next} !(a[$1,$2])'  2.tsv 1.tsv

请让我知道我们如何修改上述语句以修剪前导和滞后空间,然后进行比较。谢谢您的帮助。

4

4 回答 4

2

做这个:

awk '
BEGIN {FS=OFS=","}
NR==FNR {
    gsub(/^ *| *$/,"",$1)
    a[$1]++
    next
}
{
    gsub(/^ *| *$/,"",$1); 
    if (!($1 in a)) {
        print
    }
}' 2.tsv 1.tsv
于 2013-06-28T13:01:25.263 回答
2
awk -F, '
{ key=$1; gsub(/^[[:space:]]+|[[:space:]]+$/,"",key) }
NR==FNR { a[key]; next }
!(key in a)
' 2.tsv 1.tsv
于 2013-06-28T17:01:52.857 回答
2

GNU 的代码:

sed -r 's#\s*(\S+)\s*,\s*(\S+)\s*#/\\s*\1\\s*,\\s*\2\\s*/p#' file1|sed -f - file2
$猫文件1
1、一
2,b
 3,c

$猫文件2
1、一
 2,b
3,c
$sed -r 's#\s*(\S+)\s*,\s*(\S+)\s*#/\\s*\1\\s*,\\s*\2\\s */d#' 文件1|sed -nf - 文件2

于 2013-06-29T11:25:27.213 回答
1

$1在尝试在 array 中找到它之前,您需要修剪所有空格a

awk -F"," 'NR==FNR{$1=$1;a[$1]++;next} {f1=$1; gsub(/ /, "", f1); 
           if (!a[f1]) print}'  2.tsv 1.tsv
于 2013-06-28T13:06:53.220 回答