Поиск символа из столбца

У меня есть цепочка (|) разделенная строка, мне нужно найти первый куттер в 7-м столбце этой строки, разделенной каналом

AAAAAA|04|XXXXXXX|20170210-163119|||2.0|20170208|| 

Ожидаемый результат: 2

6 Solutions collect form web for “Поиск символа из столбца”

Это сделает работу:

 awk -F "|" '{print(substr($7,1,1))}' input.file.txt 

Вы также можете использовать cut:

 cut -d\| -f7 | cut -c1 

удар

 IFS='|' read -r -ax <<< "$str" echo "${x[7]:0:1}" 

команда read использует содержимое $ str и разделяет их на pipe | char и заполняет их в массив ( -a ) с именем x. Затем мы извлекаем один символ из начала 7-го поля.

Perl

 perl -F'\|' -pale '($_) = $F[6] =~ /./g' <<< "$str" 

-F => разделитель полей, -p => автопринт, -a => автосплит включен, -l => настройте разделитель записи ( RS ) на \n и ORS на \n .

7-е поле $F[6] оценивается в контексте списка и как /./g и возвращает отдельные символы, из которых первый /./g и сохраняется в $_ который из-за autoprint будет принимать его в stdout .

Expr

 sep='|' fld="[^$sep]*" fld7=$(yes "$fld$sep" | sed 7q | tr -d '\n') expr "$str" : "$fld7\(.\)" 

Здесь мы строим команду так, чтобы expr свою работу under the hood .

echo "$fld"; # => [^|]* echo "$fld"; # => [^|]* echo "$fld7"; # => [^|]*[^|]* echo "$fld7"; # => [^|]*[^|]* …. 7 раз

Используя python3 , предполагается , что столбец 7 существует во всех строках файла :

 python3 -c "[print(l.split('|')[6][0]) for l in open('f').readlines()]" > 2 

Где 'f' – это (полный) путь к файлу, в одинарных кавычках.

объяснение

 open('f').readlines() 

будет читать файл на строку и

 s.split('|')[6][0] 

разделит линию на делиметр | , а затем напечатать первый символ 7-го столбца (где 0 – индекс первого столбца)

Изучить интересное поведение sed

 sed 's/\(\([^|]\?\)[^|]*|\)\{7\}.*/\2/' input.file.txt 

или для уменьшения утечки

 sed -r 's/(([^|]?)[^|]*\|){7}.*/\2/' input.file.txt 

или чтобы избежать регулярного выражения

 sed '/\n/{s/./\n/2;P;d;};s/|/\n/6;s/$/\n/;D' input.file.txt 

Это может помочь:

 awk -F'[|.]' '{print $7}' filename.txt 
  • Как получить дисковое пространство (Свободно) с помощью «df -h», когда файловая система длинная
  • избежание одной точки с двойной обратной косой чертой - awk
  • удалить строки в файле csv старше 7 дней
  • Использование awk для обработки вывода ls с пробелами в именах файлов / пути
  • таблица разбиения на основе соответствия ячейки столбцу
  • Инструкция unix awk begin
  • Как заменить пустые ячейки определенного столбца
  • Нужно разбирать разделы текста из повторяющихся «группировок» строк внутри файла
  • Почему Gawk в режиме совместимости разделяет записи так же, как и при расширении GNU?
  • Удалить столбец, который содержит конкретный текст
  • Bash Script, чтобы найти номер выпуска Debian из / etc / debian_version
  • Interesting Posts

    Объедините 2 файла в одном с настраиваемой линией между

    Нет репозиториев в RedHat (через VMWARE)

    Лучший способ убить процессы, созданные скриптом bash?

    Где установлен установочный префикс?

    программа пейджера, как меньше, способна повторять верхние N строк

    Скопируйте файл, который находится в середине написания

    привязать обратную косую черту к нестандартной клавише клавиатуры

    sed для замены пробелов в кавычках

    iptables переадресовывает скрытый стиль портала

    systemd: проверьте, что служба не запущена

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

    Неизвестная кодировка: POSIX

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

    Звездочка: сделайте IVR, чтобы произносить цифры во время ввода пользователем

    Параллельно читать содержимое заархивированного файла без извлечения

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