我已经写了这段代码
for fichier in $(find $DATA $ARCH -type f -mtime $histo)
do
compteur_lignes=$(cat $fichier|wc -l)
echo "Nombre de lignes : $compteur_lignes"
quantieme_f=$(date -r $fichier +%j)
echo "Quantieme fichier : $quantieme_f"
nom_fichier=$(basename $fichier)
echo $nom_fichier
awk -vquant_f=$quantieme_f -vtype_f='' -vNB_LG=$compteur_lignes -vnom_fic=$nom_fichier '{ if ( $1 == 01 ) {type_f=substr($0,21,7);printf "\n - Type %s, Quantième du jour de réception %s, Nombre de lignes du fichier %s, Nom du fichier %s\n" , type_f, quant_f, NB_LG, nom_fic}}' ${fichier} >> ${MAIL_CORP}
done
输出就像那样:
- Type TYPEN1, Quantième du jour de réception 126, Nombre de lignes du fichier 6, Nom du fichier Test.txt
我需要在第一列上使用分隔文件进行连接:
TYPEN1:TRANSCON1
TYPEN2:TRANSCON2
TYPEN3:TRANSCON3
TYPEN4:TRANSCON4
最后得到这个输出:
- Type TYPEN1 (TRANSCON1), Quantième du jour de réception 126, Nombre de lignes du fichier 6, Nom du fichier Test.txt
我该怎么做?
答案 0 :(得分:1)
假设您的循环输出为a
且文件为b
,则
awk -F: 'NR==FNR { split($0,a,","); next }
{
s= a[1] " (" $2 ")"
for(i=2; i<=length(a); ++i) s=s "," a[i]
print s
}' a b
一次处理两行输入。第一个块在第一个输入上执行(因为NR==FNR
),next
跳到下一个输入。第二个块将第二个输入的部分夹在第一个输入中。
输出:
- Type TYPEN1 (TRANSCON1), Quantième du jour de réception 126, Nombre de lignes du fichier 6, Nom du fichier Test.txt
这里有一个假设,来自两个输入的行将按正确的顺序排列(使用sort
很容易修复)并且不会丢失任何行。如果这是一个问题,请告诉我。
答案 1 :(得分:1)
这个awk可以为你工作:
awk 'FNR==NR{if (split($0,t,":")) a[t[1]]=t[2]; next} {for (i=1; i<=NF; i++)
{f=$i; gsub(/,/, "", f); if (f in a) $i=f " (" a[f] "),"} print }' f1 f2
- Type TYPEN1 (TRANSCON1), Quantième du jour de réception 126, Nombre de lignes du fichier 6, Nom du fichier Test.txt