2014-05-15 49 views
1

我已經writen這段代碼加入與分隔的文件用awk命令

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 

我該怎麼做?

回答

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 
+0

謝謝你完美的作品! –

+0

不客氣,很高興它解決了。 – anubhava

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修復),而且不會丟失任何線。讓我知道如果這是一個問題。

+0

@ L.Quastana沒問題。雖然如果它完美的工作,我很驚訝你已經選擇接受其他答案,它不提供任何解釋。說實話,這些解決方案都不是完美的;你最好修改原來的'awk'腳本,以便它一次處理這兩個文件。 –