Чтение двух файлов и последовательная запись данных в третий файл с использованием сценария оболочки - PullRequest
0 голосов
/ 18 марта 2019

У меня есть два файла.Первый файл содержит постоянные данные (например, справочный файл)В другом файле есть динамические данные.У него есть значения, связанные с первыми файловыми ключами с использованием сценария оболочки.

File1.txt

CIN|Template|Date

File2.txt

1234|QWERTY|2019-03-18
5678|ASDF|2019-03-18
9012|ZXCVB|

Я хочу выходной файл Output.txtкак:

{CIN: 1234
Template: QWERTY
Date:  2019-03-18}
{CIN: 5678
Template: ASDF
Date: 2019-03-18}
{CIN: 9012
Template: ZXCV
Date: }

Ответы [ 3 ]

0 голосов
/ 18 марта 2019

попробуйте это:

#!/bin/bash
FILE1=File1.txt
FILE2=File2.txt

IFS="|"
read -a Header < $FILE1
ColumnsCount=${#Header[@]}

while read line; do
    read -a Values <<< $line
    echo -n "{"
    for ((i=0; i < $ColumnsCount; i++)); do
        echo -n "${Header[$i]}: ${Values[$i]}"
        if [[ $i -lt $((ColumnsCount - 1)) ]]; then
            echo
        fi
    done
    echo "}"
done < $FILE2
0 голосов
/ 20 марта 2019

Вот мое решение

awk -F "|" 'NR==FNR {first= $1; second=$2; third=$3;} NR > 1{print "{" first ":" $1 "\n" second ":" $2 "\n" third ": "$3  "}" }' File1.txt File2.txt


{CIN:1234
Template:QWERTY
Date: 2019-03-18}
{CIN:5678
Template:ASDF
Date: 2019-03-18}
{CIN:9012
Template:ZXCVB
Date: }
0 голосов
/ 18 марта 2019

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

$ awk -F\| '             # set field separator
NR==FNR {                # process first file
    split($0,a)          # split on field separator and hash to a
    next
}
{                        # second file
    for(i=1;i<=NF;i++)   # iterate all fields and output refering titles from a
        printf "%s%s: %s%s\n",(i==1?"{":""),a[i],$i,(i==NF?"}":"")
}' file2 file2

Выход:

{CIN: 1234
Template: QWERTY
Date: 2019-03-18}
{CIN: 5678
Template: ASDF
Date: 2019-03-18}
{CIN: 9012
Template: ZXCVB
Date: }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...