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

它使用|;作为字段分隔符,并对第三个这样的字段和字符串 进行字符串比较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 )。|frenchdutch;;;[;|]

相关内容