ファイル内のすべての行を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 番目のフィールドの先頭にある文字列を検出し、一致する場合はその行を出力します。

frenchが3番目の - で区切られたフィールドのどこにでも出現できる場合|(たとえばdutch;french)、そのパターンを少し緩和して、

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

grepここで使用するには少し不便です。なぜなら、どの|-delimited フィールドと一致するかを正確に指定するのが難しいからです。

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

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

拡張正規表現の場合:

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

|代替として解釈されないようにするには、now をエスケープする必要があることに注意してください。

繰り返しになりますが、frenchが 3 番目のフィールド内のどこにでも発生する可能性がある場合は、式を少し緩和する必要があります。

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

または、

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

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

関連情報