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

У меня есть цепочка (|) разделенная строка, мне нужно найти первый куттер в 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 
  • Добавить временную метку в верхний вывод команды
  • Как объединить файлы CSV
  • Форматировать вывод на определенную длину строки
  • Использование awk для печати столбцов, содержащих несколько шаблонов
  • Как сохранить результаты предыдущих операций в awk?
  • Вывести некоторые разделы текстового файла
  • Как заменить последнее совпадение на строку
  • Заменить все, кроме набора символов, в файле с символом новой строки
  • Печать наименьшего целого из файла с помощью специальной функции awk?
  • Преобразование генотипов в 0/1
  • Как присоединиться к двум файлам, сопоставляя столбцы с неправильным количеством столбцов?
  • Linux и Unix - лучшая ОС в мире.