使用 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

我想測試第三個是否被 | 分割是法語(法語可以在另一個拆分中,因此只有第三個)並將與此匹配的所有行放入其他文件中。

例 :

bonjour|b|french;deutsch|french

french;deutsch匹配它

就像是awk -F | '$3=="french"' file

答案1

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

這使用|;作為字段分隔符,並在第三個此類字段和 string 之間進行字串比較french。如果字串匹配,則輸出該行。任何輸出都會重定向到該檔案newfile

如果使用僅有的 |作為分隔符,您必須在第三個欄位的開頭使用正規表示式進行測試:

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

french;這會偵測第三個欄位開頭的字串,如果符合則輸出該行。

如果french可以出現在第三個|分隔欄位中的任何位置(例如 as dutch;french),那麼您可能需要稍微放寬該模式以使用

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

grep在這裡使用會有點尷尬,因為更難以準確指定|要匹配的分隔欄位:

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

這匹配一串字母字符(字母),後面跟著一個|字符,兩次,然後是字串french;

使用擴展的正規表示式:

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

請注意,|現在需要轉義,以免被解釋為交替。

同樣,如果french可以出現在第三個欄位內的任何位置,您將需要稍微放鬆表達式:

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

或者,

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

我插入了,它匹配單字之前的[^|]*任何非字元(例如,字串),並且我刪除了|frenchdutch;;單字末尾的 (或者您可以將 替換;[;|])。

相關內容