Использование 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
измениться