这是我的文件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
它使用|
和;
作为字段分隔符,并对第三个这样的字段和字符串 进行字符串比较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
我插入了,它匹配单词之前的[^|]*
任何非字符(例如字符串),并且我删除了单词末尾的 (或者您可以将 替换为by )。|
french
dutch;
;
;
[;|]