Вот мой файл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;
), и удалил ;
в конце слова (или вы могли бы заменить ;
на [;|]
).