1

我有两个带有逗号分隔值的文件,我想删除 file1 中与文件 2 中的字符串匹配的所有字符串。

file1:
soap,cosmetics,june,hello,good

file2:
june,hello

output:
soap,cosmetics,good

我试过这个,但不工作。我不确定我哪里出错了。任何帮助表示赞赏。

BEGIN {
    FS=","
}

NR==FNR {
    a[NR]=$0
    next
}

{
    for (j=1;j<=NF;j++) {
        split($0, d, ",")
        if (d[j] in a == 0) {
            line = (line ? line "," : "") d[j]
        }
    }
print line
line = ""
}
4

2 回答 2

3

这是使用awk. 像这样运行:

awk -f script.awk file2 file1

内容script.awk

BEGIN {
    FS=","
}

FNR==NR {
    for(i=1;i<=NF;i++) {
        a[$i]
    }
    next
}

{
    for(j=1;j<=NF;j++) {
        if (!($j in a)) {
            r = (r ? r FS : "") $j
        }
    }
}

END {
    print r
}

结果:

soap,cosmetics,good

或者,这是单线:

awk -F, 'FNR==NR { for(i=1;i<=NF;i++) a[$i]; next } { for(j=1;j<=NF;j++) if (!($j in a)) r = (r ? r FS : "") $j } END { print r }' file2 file1
于 2013-02-06T20:11:54.147 回答
1
$ gawk -v RS='[,\n]' 'NR==FNR{a[$0];next} !($0 in a){o=o s $0;s=","} END{print o}' file2 file1
soap,cosmetics,good
于 2013-02-06T21:38:14.323 回答