这是我的文件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|frenchfrench;deutsch匹配它
有点像awk -F | '$3=="french"' file
发布于 2020-04-12 09:57:07
awk -F '[|;]' '$3 == "french"' file >newfile这使用|和;作为字段分隔符,并在第三个这样的字段和字符串french之间进行字符串比较。如果字符串匹配,则输出行。任何输出都重定向到文件newfile。
如果只使用|作为分隔符,则必须在第三个字段开始时使用正则表达式进行测试:
awk -F '|' '$3 ~ /^french;/' file >newfile这将检测到第三个字段开头的字符串french;,并输出匹配的行。
如果french可以出现在第三个|-delimited字段中的任何地方(例如dutch;french),那么您可能需要稍微放松一下这个模式。
awk -F '|' '$3 ~ /french/' file >newfile在这里使用grep会有点麻烦,因为很难确切指定要匹配的|-delimited字段:
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;)之前的任何一段非|字符,并且在单词末尾删除了; (或者您可以用[;|]替换; )。
https://unix.stackexchange.com/questions/579558
复制相似问题