awkとgrepを使用してファイル内のすべての行をテストし、一致する場合は別のファイルに入れます。

awkとgrepを使用してファイル内のすべての行をテストし、一致する場合は別のファイルに入れます。

これは私のファイルです。test.csv

bonjour|b|french;deutsch|french
hello|h|english;russian|french
gutentag|g|german;polish|french
ciao|i|italian|french

|による3番目の分割がフランス語かどうかをテストし(フランス語は別の分割にある可能性があるため、3番目のみ)、それに一致するすべての行を別のファイルに保存したいと思います。

例:

bonjour|b|french;deutsch|french

french;deutsch一致させる

それはまるでawk -F | '$3=="french"' file

答え1

awk -F '[|;]' '$3 == "french"' file >newfile

|これはフィールド区切り文字として使用され、;3番目のフィールドと文字列の文字列比較を実行しますfrench。文字列が一致すると、対応する行が出力されます。すべての出力はファイルにリダイレクトされますnewfile

使用する場合ただ |区切り文字として、3番目のフィールドの先頭に正規表現を使用してテストする必要があります。

awk -F '|' '$3 ~ /^french;/' file >newfile

french;これは、3番目のフィールドの先頭で文字列を検出し、一致する場合は行を出力します。

french3番目に区切られたフィールドの|どこにでも表示できる場合(例dutch;french:)、使用するにはパターンを少し緩和する必要があります。

awk -F '|' '$3 ~ /french/' file >newfile

grep|一致する区切りフィールドを正確に指定するのは難しいため、ここで使用するのは少し厄介です。

grep '^\([[:alpha:]]\{1,\}|\)\{2\}french;' file >newfile

これはアルファベット文字(文字)の文字列、それに続く|文字の2回、文字列と一致しますfrench;

拡張正規表現を使用してください。

grep -E '^([[:alpha:]]+\|){2}french;' file >newfile

|これで、一般的に解釈されるのを避けるためにエスケープが必要です。

同様に、3番目のフィールド内のどこにでも表示できる場合は、french式を少し緩和する必要があります。

grep '^\([[:alpha:]]\{1,\}|\)\{2\}[^|]*french' file >newfile

または、

grep -E '^([[:alpha:]]+\|){2}[^|]*french' file >newfile

単語の前に文字以外の文字(文字列など)と一致すると挿入し、単語の[^|]*末尾にある文字を削除しました(またはに置き換えることができます)。|frenchdutch;;;[;|]

関連情報