Объединить строки второго столбца для соответствующих значений в первом столбце и создать файл - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть требование создания файла (отдельного файла) на основе значений первого столбца.

Исходный файл похож на

Batch No ; Values 
-------------------
B1       ; TEST1
B1       ; TEST2
B1       ; TEST3
B2       ; DELTA1
B2       ; DELTA2

Ожидаемый вывод будет два файла

  1. B1.txt (содержит)

    TEST1
    TEST2
    TEST3
    
  2. B2.txt (содержит)

    DELTA1
    DELTA1
    

Данные исходного файла будут меняться каждый раз, но структура (количество столбцов и разделитель) будет согласована

Есть предложения?

Ответы [ 3 ]

0 голосов
/ 09 ноября 2018

Это один лайнер с awk:

tail -n +3 test.txt | awk '{print $3>$1".txt"}'

Хвост -n +3 удаляет первые 2 строки заголовка; скрипты awk выводят значение 3-го поля в файл с именем первого поля, объединенного с .txt

Разделителем полей awk по умолчанию является пробел, поэтому в вашем примере ; - это поле № 2, которое мы отбрасываем. Чтобы это работало, входной файл даже не нужно сортировать по первому полю.

0 голосов
/ 10 ноября 2018
#!/bin/bash
while read -r file data; do
    echo "${data#; *}" >> "$file".txt
done < <(sed -n -e '1,/^---/!p' source_file)
0 голосов
/ 09 ноября 2018

Вы можете использовать awk для этого.

awk -F" *; *" 'NR > 2{print $2 > $1 ".txt"}' source.txt

Это означает, что ваш исходный файл source.txt и содержит

Batch No ; Values 
-------------------
B1       ; TEST1
B1       ; TEST2
B1       ; TEST3
B2       ; DELTA1
B2       ; DELTA2

В результате получаются два файла: B1.txt и B2.txt

  • -F" *; *": определяет разделитель полей. В этом случае точка с запятой и любое количество пробелов до и после точки с запятой.
  • NR > 2: вы пропускаете первые два ряда.
  • $1, $2 хранит содержимое первого и второго столбцов соответственно.
  • С помощью > вы перенаправляете вывод команды print в соответствующий файл вместо печати на стандартный вывод.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...