awk:file2中的打印字符串与字符串file2不匹配

时间:2013-02-06 20:04:20

标签: awk

我有两个逗号分隔值的文件,我想删除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 = ""
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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