這是我的文件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
我插入了,它匹配單字之前的[^|]*
任何非字元(例如,字串),並且我刪除了|
french
dutch;
;
單字末尾的 (或者您可以將 替換;
為[;|]
)。