Разделить одну запись на несколько записей в сценарии оболочки Unix - PullRequest
0 голосов
/ 17 мая 2019

У меня есть запись

Пример:

EMP_ID|EMP_NAME|AGE|SALARAy
123456|XXXXXXXXX|30|10000000

Есть ли способ разделить запись на несколько записей. Пример вывода должен быть как

EMP_ID|Attributes
123456|XXXXXXX
123456|30
123456|10000000

Я хочу разбить одну и ту же запись на несколько записей. Здесь идентификатор сотрудника - мой уникальный столбец, а оставшиеся 3 столбца я хочу запустить в цикле и создать 3 записи. Как EMP_ID | EMP_NAME, EMP_ID | AGE, EMP_ID | SALARY. У меня может быть еще несколько столбцов, но для примера я указал 3 столбца вместе с идентификатором сотрудника

Пожалуйста, помогите мне с любым предложением.

Ответы [ 2 ]

0 голосов
/ 17 мая 2019

С bash:

record='123456|XXXXXXXXX|30|10000000'
IFS='|' read -ra fields <<<"$record"
for ((i=1; i < "${#fields[@]}"; i++)); do 
    printf "%s|%s\n" "${fields[0]}" "${fields[i]}"
done
123456|XXXXXXXXX
123456|30
123456|10000000

Для всего файла:

{
    IFS= read -r header
    while IFS='|' read -ra fields; do
        for ((i=1; i < "${#fields[@]}"; i++)); do 
            printf "%s|%s\n" "${fields[0]}" "${fields[i]}"
        done
    done
} < filename
0 голосов
/ 17 мая 2019

Запись строк с полями, разделенными специальным символом-разделителем, таким как |, может управляться базовыми инструментами командной строки Unix, такими как awk. Например, с вашими входными записями в файле records.txt:

awk -F\| 'NR>1{for(i=2;i<=NF;i++){print $1"|"$(i)}}' records.txt

Я рекомендую прочитать учебник по awk и поиграть с ним. Связанные инструменты командной строки, которые стоит изучить, включают grep, sort, wc, uniq, head, tail и cut. Если вы регулярно выполняете обработку данных в файлах, разделенных разделителями, они, скорее всего, понадобятся вам ежедневно. Как только ваш формат структурирования данных станет более сложным (например, формат CSV с возможностью также использовать символ разделителя в значениях полей), вам потребуются более конкретные инструменты, например, см. этот вопрос по инструментам CSV или JQ для обработки JSON. Все же знание основных инструментов командной строки Unix сэкономит вам много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...