Как последовательно объединить два файла на основе определенных условий в Unix - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь отформатировать файлы в Unix (в данном случае RHEL).

Файл 1

AAAAA|AAA|1582|YNYY
BBBBB|BAV|1234|NYYY

Файл 1 содержит 1 запись выборки (строка). В каждой записи 4 столбца. В столбце 4 у нас есть 4 значения статуса.

Файл 2

20190103|W 2019 01
20190203|W 2019 02
20190303|W 2019 03
20190403|W 2019 04

Вывод должен быть следующим:

AAAAA|1582|Y|20190103|W 2019 01
AAAAA|1582|N|20190203|W 2019 02
AAAAA|1582|Y|20190303|W 2019 03
AAAAA|1582|Y|20190403|W 2019 04
BBBBB|1234|N|20190103|W 2019 01
BBBBB|1234|Y|20190203|W 2019 02
BBBBB|1234|Y|20190303|W 2019 03
BBBBB|1234|Y|20190403|W 2019 04

Я пробовал AWK и вставку, но не могу получить требуемый вывод.

1 Ответ

0 голосов
/ 03 апреля 2020

Использование awk

awk -F'|' '{split($4,a,""); b=$1"|"$2"|"$3} { getline < "file2"; for (i in a ) print b"|"a[i]"|"$0  }' < file1`

Демонстрация:

$cat file1 file2 
AAAAA|AAA|1582|YNYY
BBBBB|BAV|1234|NYYY
20190103|W 2019 01
20190203|W 2019 02
20190303|W 2019 03
20190403|W 2019 04
$awk -F'|' '{split($4,a,""); b=$1"|"$2"|"$3} { getline < "file2"; for (i in a ) print b"|"a[i]"|"$0  }' < file1
AAAAA|AAA|1582|Y|20190103|W 2019 01
AAAAA|AAA|1582|N|20190103|W 2019 01
AAAAA|AAA|1582|Y|20190103|W 2019 01
AAAAA|AAA|1582|Y|20190103|W 2019 01
BBBBB|BAV|1234|N|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
BBBBB|BAV|1234|Y|20190203|W 2019 02
$

Объяснение:

awk -F'|' <- Установить разделитель полей как | </p>

'{split($4,a,""); <- Разделить 4-е поле и сохранить в массиве a </p>

b=$1"|"$2"|"$3} <- Сохранить столбец 1-2 в переменной b </p>

getline < "file2"; < - читать входные данные из файла2 строка за строкой

for (i in a ) print b"|"a[i]"|"$0 <- L oop через массив <code>a и добавлять переменную b и входную запись из file2

Примечание : При использовании getline значения внутренних переменных $0, NF, NR измениться

...