これは私のファイルです。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
|
一致する区切りフィールドを正確に指定するのは難しいため、ここで使用するのは少し厄介です。
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
単語の前に文字以外の文字(文字列など)と一致すると挿入し、単語の[^|]*
末尾にある文字を削除しました(またはに置き換えることができます)。|
french
dutch;
;
;
[;|]