XYZデータを含む.csv列のみを維持しますか?

XYZデータを含む.csv列のみを維持しますか?

単語のみを含む.csvデータ行を保持し、dog2cat番目の列でのみ確認できます。 「dog」という単語が別の列には表示されますが、2番目の列には表示されない場合は無視する必要があります。

たとえば、次のような場合があります。

email1.com dog
email2dog.com steve
email3.com cat

予想出力:

email1.com dog
email3.com cat

長い単語のリストを維持する必要があるかもしれないので、可能であれば他のファイルからそれらの単語をロードしてください。

答え1

そしてsed

$ sed -n -e 's/dog$/&/p' -e 's/cat$/&/p' file
email1.com dog
email3.com cat

または、次のものを使用できますawk

awk '$2~/^dog|cat$/' file

答え2

さまざまな方法:

  1. dogorがcat常に行の最後の単語である場合:

    awk '/(dog|cat)$/' file
    grep -E '(dog|cat)$' file
    sed -n '/\(dog\|cat\)$/p' file
    perl -ne 'print if /(dog|cat)$/' file
    
  2. dogまたは、cat2番目のどこにでも表示できる場合スペースで区切る土地:

    awk '$2~/dog|cat/' file
    grep -E '^\S+\s+\S*(dog|cat)\S*\s*' file
    perl -ane 'print if $F[1]=~/dog|cat/' file
    sed -nr '/^\S+\s+\S*(dog|cat)\S*\s*/p' file
    sed -n '/^\S\+\s\+\S*\(dog\|cat\)\S*\s*/p' file
    
  3. ファイルから検索パターンを読み取るには、次のようにします。

    awk '{if(NR==FNR){a[$0]++; next}for(p in a){if($2~p){print}}}' patterns  file
    

答え3

{   sed 's/[]$^&\./*[]/\\&/g;s/$/$/'|
    grep -f- ./greppedfile
}   <words

複数の一致パターンを処理する状況を処理できます。words各行にはパターンが含まれています。可能な正規表現を慎重にエスケープします。メタ文字これにより、結果パターンが行の末尾に固定されるため、その中のすべての文字はwords文字通り一致grepし、パターンは次の場合にのみ一致します。言葉行末で発生します。これが私が欲しいものを理解したと思うものです。

通常、メタ文字エスケープのない固定文字列モードをgrep使用できるため、このようなメタ文字エスケープはありません。-Fただし、これはパターンを固定するためにメタ文字を使用できないため、取得したものを使用することを意味$します。

答え4

grepPCREで使用:

$ grep -P '^[^ ]+\s+dog|cat(?=\s|$)' file.txt 
email1.com dog
email3.com cat

dogcatこれにより、行の2番目の列に表示される行のみが印刷されます。

関連情報