1

値がコンマで区切られた2つのファイルがあり、ファイル2の文字列と一致するfile1のすべての文字列を削除したいと思います。

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

を使用する 1 つの方法を次に示し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 に答える