проверьте все строки в файле с помощью 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может встречаться в любом месте третьего |разделителя (например, как dutch;french), то вы можете немного смягчить этот шаблон и использовать

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

grepбыло бы немного неудобно использовать здесь, так как сложнее точно указать, какое |поле, разделенное -разделителем, должно соответствовать:

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

Это соответствует строке алфавитных символов (букв), за которой следует |символ дважды, а затем строка french;.

С расширенным регулярным выражением:

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

Обратите внимание, что |now необходимо экранировать, чтобы не интерпретировать его как чередование.

Опять же, если frenchможет встретиться где угодно в третьем поле, вам нужно будет немного смягчить выражение:

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

или,

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

Я вставил [^|]*, который соответствует любому отрезку несимволов |перед словом french(например, строке dutch;), и удалил ;в конце слова (или вы могли бы заменить ;на [;|]).

Связанный контент