代码之家  ›  专栏  ›  技术社区  ›  pleasedontbelong

shell过滤文件中的禁止字

  •  4
  • pleasedontbelong  · 技术社区  · 14 年前

    祝贝壳爱好者们今天愉快!

    基本上我有两个文件:

    频率.txt: (多行,空格分隔的文件,包含单词和频率)

    de 1711
    a 936
    et 762
    la 530
    les 482
    pour 439
    le 425
    ...
    

    我有一个包含“禁止”字眼的文件:

    stopwords.txt文件: (一行,空格分隔的文件)

     au aux avec le ces dans ...
    

    所以我想删除 频率.txt 所有包含单词的行在 stopwords.txt文件

    我怎么能那样做?我想可以用awk来完成。。有点像

    awk 'match($0,SOMETHING_MAGICAL_HERE) == 0 {print $0}' frequency.txt > new.txt
    

    但我不确定。。。有什么想法吗??提前付款

    4 回复  |  直到 14 年前
        1
  •  4
  •   j_random_hacker    14 年前
    tr ' ' '\n' < stopwords.txt | grep -vwFf - frequency.txt
    

    这个 -w grep 是避免的关键。 le 在stopwords.txt中删除包含 喜欢 less little .

        2
  •  6
  •   ghostdog74    14 年前
    $ awk 'FNR==NR{for(i=1;i<=NF;i++)w[$i];next}(!($1 in w))' stop.txt freq.txt
    de 1711
    a 936
    et 762
    la 530
    les 482
    pour 439
    
        3
  •  5
  •   Michael Goldshteyn    13 年前

    tr ' ' '\n' <stopwords.txt | grep -v -w -F -f - frequency.txt
    

    -v是反转匹配

    -F表示模式是一组换行分隔的固定字符串
    -f从stopwords.txt文件中获取模式字符串

    如果有问题,因为它是空格分隔的,可以使用tr将空格替换为换行符:

        4
  •  2
  •   pixelbeat    14 年前
    join -v1 <(sort frequency.txt) <(tr ' ' '\n' <stopwords.txt|sort) | sort -k2,2rn