これが私のファイルです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
単語の前の[^|]*
以外の文字の連続(たとえば、文字列) に一致する を挿入し、単語の末尾のを削除しました(またはを に置き換えることもできます)。|
french
dutch;
;
;
[;|]