Bash 使用shell脚本读取两个文件并在第三个文件中按顺序写入数据
我有两个文件。第一个文件具有恒定的详细信息(如参考文件)。另一个文件中有动态数据。它具有与使用shell脚本的第一个文件键关联的值 File1.txtBash 使用shell脚本读取两个文件并在第三个文件中按顺序写入数据,bash,shell,awk,Bash,Shell,Awk,我有两个文件。第一个文件具有恒定的详细信息(如参考文件)。另一个文件中有动态数据。它具有与使用shell脚本的第一个文件键关联的值 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:
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: }
使用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
试试这个:
#!/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
#/bin/bash
FILE1=FILE1.txt
FILE2=FILE2.txt
IFS=“|”
读取-标题<$FILE1
ColumnsCount=${#头[@]}
读行时;做
读取-a值这是我的解决方案
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: }
你有没有尝试过任何东西(顺便说一句,不是我的否决票)?…也就是说——一个好问题不仅仅是你希望别人编写的代码规范,而是你自己编写代码时遇到的一个孤立问题,显示了你现有的努力以及你在哪里/如何陷入困境。
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: }