Найти только сопоставленный шаблон в файле CSV

Я пытаюсь напечатать только сопоставленный шаблон в CSV-файле. Пример: все значения столбцов, начинающиеся с 35=its value . Благодарю.

CSV-файл:

 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 

Вывод:

 35=A 35=BCD 35=EF 35=G 

Команда, которую я использовал, не работала:

 sed -n '/35=[AZ]*?/ s/.*\(35=[AZ]*?\).*/\1/p' filename 

5 Solutions collect form web for “Найти только сопоставленный шаблон в файле CSV”

С GNU grep который поддерживает опцию -o для печати только согласованной строки, каждая на своей собственной линии

 $ grep -oE '\b35=[^,]+' ip.csv 35=A 35=BCD 35=EF 35=G 
  • \b – граница слова, так что 900035 не будет соответствовать
  • [^,]+ для соответствия одному или нескольким символам без символов
  • предполагает, что значения не содержат ,

С awk

 $ awk -F, '{ for(i=1;i<=NF;i++){if($i~/^35=/) print $i} }' ip.csv 35=A 35=BCD 35=EF 35=G 
  • -F, set , качестве разделителя полей ввода
  • for(i=1;i<=NF;i++) итерация по всем полям
  • if($i~/^35=/) если поле начинается с 35=
    • print $i напечатать это поле

Подобно perl

 perl -F, -lane 'foreach (@F){print if /^35=/}' ip.csv 

Используя tr чтобы заменить все запятые на новые строки, а затем grep чтобы получить все строки, начинающиеся со строки 35= :

 $ tr ',' '\n' <data.in | grep '^35=' 35=A 35=BCD 35=EF 35=G 

С perl:

 $ perl -lne 'print for /(\b35=[^,]+)/g' filename 35=A 35=BCD 35=EF 35=G 

или, возможно, в целом / с помощью модуля Text :: CSV

 $ perl -MText::CSV -lne ' BEGIN{$p = Text::CSV->new()} print for grep { /^35=/ } $p->fields(), $p->parse($_) ' filename 35=A 35=BCD 35=EF 35=G 

Perl lookarounds с grep работают очень хорошо.

grep -oP '(?<=35\=).*?(?=,)'

Это возвращает точную информацию за вычетом 35= бит

grep -oP '(?<=35\=).*?(?=,)' file.csv вернет это

BCD
г
EF

Решение Pure Bash:

 ( # Use parentheses as scope for IFS IFS=$',\n' # Split on both , or \n for c in $(</tmp/file.csv) # For every column or row do [[ "$c" =~ ^35= ]] && echo ${line##35=} # Find ^35= and print while removing ^35= done ) # Optionally >/tmp/filtered-output.txt 

Обратите внимание: используйте это только для удобства чтения и гибкости – если вы можете его прочитать , в противном случае вы можете использовать следующий подход:

 # Read | Replace | Find | Remove cat /tmp/file.csv | tr ',' '\n' | grep '^35=' | sed 's/^35=//' 

который более интуитивно понятен и эффективен.

Вход (/tmp/file.csv):

 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 и 35=A,D=35,C=129,ff=136 D=35,35=BCD,C=129,ff=136 900035=G,D=35,C=129,ff=136 35=EF,D=35,C=129,ff=136,35=G 36=o,D=35,k=1 

Вывод:

 A BCD EF G 
  • Как использовать sed для вставки строки вверху моего файла?
  • Как использовать оболочку для получения IPv6-адреса с MAC-адреса?
  • Изменение имени сервера в файле OpenVPN с помощью sed
  • Найти шаблон и удалить его из всех файлов
  • Удалить диапазон строк над шаблоном с помощью sed (или awk)
  • проверка данных в столбцах, когда данные или некоторые могут отсутствовать или присутствовать?
  • Замените длинную строку командой sed: слишком длинная ошибка списка аргументов
  • Поиск шаблона между определенными линиями и номерами строк печати
  • Исключение одиночных кавычек ** с ** псевдонимом
  • Объединение трех последовательных строк с заменой
  • множественные замены на одной строке с sed
  • Извлечение данных из текстового файла
  • Interesting Posts

    Создание двух дисков, как один на debian?

    Как установить режим видео в linux с помощью kms / drm?

    Терминал не вызывает «then», сообщает синтаксическую ошибку, а команда не найдена

    Создание приложения bash для OpenWrt

    Могу ли я делать все на Linux без клавиатуры?

    Как продолжить предложение с помощью команды внутри

    Как перенести файлы из одного каталога во вложенный каталог с помощью SSH?

    Как выбрать, скопировать и вставить некоторые столбцы из разных файлов и создать из них один файл?

    Почему этот двоичный файл передается поверх «ssh -t», который изменяется?

    Команда grep для отображения того же слова с разными написаниями

    grep, awk, sed, печать столбца 2, совпадающая в файле1 и file2 column3

    Как заблокировать диапазон IP-адресов с помощью экземпляра Amazon EC2?

    Bacula: задание резервного копирования заданного диска не возобновляется при перезагрузке диска

    Как добавить «открыть папку в качестве пользователя» в контекстном меню «Элементарный файловый менеджер ОС»?

    Как я могу воспроизвести звук, когда выполнение скрипта будет готово?

    Linux и Unix - лучшая ОС в мире.