Проблема извлечения данных на основе слов верхнего регистра

У меня есть файл данных в следующем формате:

source.dat ( пример для иллюстрации ).

ALBANIA Duck 1000 BELGIUM CHARLEROI Donald Duck 10234 CYPRUS J. Mickey 567 

Я ищу сценарий Linux (Bash, perl, whatever) для извлечения информации в формате csv с заданными правилами:

  • 1-е поле в csv содержит только все слова, которые находятся в верхнем регистре
  • Третье поле в csv содержит последнее поле ввода (число)
  • Второе поле в csv содержит оставшуюся среднюю часть

Таким образом, ожидаемый результат должен быть:

output.csv

 ALBANIA,Duck,1000 BELGIUM CHARLEROI,Donald Duck,10234 CYPRUS J.,Mickey,567 

2 Solutions collect form web for “Проблема извлечения данных на основе слов верхнего регистра”

Портабельно:

 sed 's/\([^[:lower:]]*\) \(.*\) /\1,\2,/' < source.dat > output.csv 

Если вы делаете это напрямую

 sed -r 's/([[:upper:] .]+)\s+(.*)\s+([0-9]+)\s*$/\1,\2,\3/' file 

Как мы видим, поле1 остается на месте, поэтому мы можем упростить скрипт

 sed -r 's/\s+(\w*[[:lower:]].*)\s+([0-9]+)\s*$/,\1,\2/' file 

даже

 sed -r 's/\s+(\w*[[:lower:]].*[^0-9])\s+/,\1,/' file 
  • обработка текста: извлечение частей файла и запись их в одну строку
  • Удалить строки, содержащие X в определенном столбце .csv
  • AWK, Сумма категории
  • Обновить заголовок таблицы относительно имени файла
  • объединить несколько строк данных, имеющих одно общее поле
  • Группировать по и сумме в сценарии оболочки без awk
  • Подсчитайте количество вхождений значения столбца в TSV-файл с AWK
  • Объединение файлов CSV (одна строка в строке) без потери строки заголовка
  • Преобразование CSV в TSV
  • Вычислить сумму столбца с помощью shellscript
  • Использование фиксированных строк в регулярных выражениях?
  • Interesting Posts

    Как отправить электронное письмо, которое будет спать в моем списке очередей?

    Как принять все сети с тем же ssid с wicd?

    Как узнать, какие команды выполняются, когда я что-то делаю в графическом интерфейсе

    Что означает дефис на уровне запуска chkconfig в сценарии /etc/init.d?

    Как преобразовать файл MKV в H.264 / AVC с разрешением 640×360 с использованием FFMPEG?

    Миграция Centos 6 в Fedora 25

    Возможно ли получить уведомление SMS / текстового сообщения, когда процесс завершится или будет убит?

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

    RAID-1 не собирается, элементы, перечисленные как SPARE, как восстановить?

    Внезапно я не могу войти с правильным паролем (greeter & tty)

    Как я могу загрузить систему в корневой сеанс, а затем запустить команду в этом сеансе?

    Что делать, когда .profile не существует для редактирования PATH?

    При установке пакета я могу предоставить разрешение на запись для определенных файлов?

    Использование socat to Tunnel / Proxy TCP позволяет разделить передачу / получение в отдельные файлы

    Ubuntu + nginx, получить информацию о виртуальной машине

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