Извлечь из файла подстроки с фиксированной позицией

Мне нужно извлечь подстроки из файла в новый файл. Mac или Linux.

Данные находятся между 4-м и 5-м | условное обозначение.

HD|262339|9400530374||K7UKD|A|HA|12/15/2009|03/13/2020

Фактическое положение столбцов может меняться, иногда очень сильно, но данные всегда находятся между 4-м и 5-м символом вертикальной черты.

Образцы данных такие же, как указано выше, ожидаемый результат будет K7UKD.

Я пробовал различные хаки в регулярном выражении:

grep  "/\|(\w+)\|/" input.txt > output.txt

person Alan    schedule 28.02.2021    source источник
comment
Пожалуйста, добавьте образец ввода (без описаний, изображений, ссылок) и желаемый результат для этого образца ввода к вашему вопросу (без комментариев).   -  person Cyrus    schedule 28.02.2021
comment
Одна попытка добавлена ​​к вопросу вместе с ожидаемым результатом. Образец ввода был в исходном вопросе.   -  person Alan    schedule 28.02.2021
comment
Попробуйте: awk -F'|' '{print $5}' file   -  person anubhava    schedule 28.02.2021


Ответы (1)


Преобразование моего комментария в ответ, чтобы будущим посетителям было легко найти решение.

Получить его можно двумя способами:

Любая версия awk:

awk -F'|' '{print $5}' file

K7UKD

или используя gnu-awk:

awk -v RS='|' 'NR == 5' file

Вот bash решение с использованием read:

IFS='|' read -ra arr <<< 'HD|262339|9400530374||K7UKD|A|HA|12/15/2009|03/13/2020' &&
echo "${arr[4]}"

K7UKD

Или используя cut:

cut -d'|' -f5 file

Или используя sed:

sed -E 's/^([^|]*\|){3}\|([^|]*).*/\2/' file
person anubhava    schedule 01.03.2021