0

我有两个文件

文件 A 的内容

paybackFile_537214-760887_000_20120801.xml
paybackFile_354472-544899_000_20120801.xml
paybackFile_62-11033_000_20120801.xml
paybackFile_831669-837544_000_20120801.xml
===========================================
Total file(s) - 4
===========================================

文件 B 的内容

14/08/2012 12:36:01: MSG: File paybackFile_537214-760887_000_20120801.xml.gpg decrypted successfully.
13/08/2012 11:36:01: MSG: File paybackFile_62-11033_000_20120801.xml.gpg not decrypted successfully.

这里我有.xml 文件的名称。从文件 A 我们检查 * *.xml 文件是否存在于文件 B 中,并检查它是否已成功解密。

你能帮我解决这个问题吗?

提前致谢。

问候, 斯米塔

4

3 回答 3

1
awk 'FNR==NR{a[$2".gpg"];next}(($5 in a) && ($0~/decrypted/))' filea fileb
于 2012-09-04T07:18:10.183 回答
0

这是一个脚本:

#!/bin/sh

FILEA=fileA
FILEB=fileB

awk -F" " ' { print $2 } ' $FILEA > .tmpfileA 
awk -F" " ' { print $5 } ' $FILEB | sed 's/\.gpg//' | grep 'decrypted successfully' > .tmpfileB


diff .tmpfileA .tmpfileB

rm -f .tmpfileA
rm -f .tmpfileB

您需要更改的只是变量 FILEA 和 FILEB

当使用您提供的输入执行它时,它会给出以下结果:

$ testAB.ksh 
2d1
< paybackFile_521000-845442_000_20120701.xml
$ 
于 2012-09-04T11:17:46.320 回答
0

创建一个名为 compare.awk 的脚本。把这个粘贴到里面:

FILENAME=="fileB" && $5 ~ /xml/ {
     if ($6 == "decrypted" && $7 == "successfully.") {
         decrypted_file[$5] = 1;
     } else {
         decrypted_file[$5] = 2;
     }
}
FILENAME=="fileA" && $2 ~ /xml/ {
    if (decrypted_file[$2".gpg"] == 1) {
        print $2" exist and decrypted";
    } else if (decrypted_file[$2".gpg"] == 2) {
        print $2" exist but not decrypted";
    } else {
        print $2" not exist in fileB";
    }
}

通过以下方式调用它:

awk -F' ' -f compare.awk fileB fileA

[编辑] 对于没有 awk 脚本的 shell,(仍然需要 grep、sed、cut 和 wc tho):

#!/bin/bash

TESTA=`grep ".xml" fileA | cut -d' ' -f2`
TESTB=`grep ".xml" fileB | cut -d' ' -f5,6,7 | sed 's/ /-/g'`
DECRYPT_YES=""
DECRYPT_NO=""

for B in ${TESTB}
do
 DECRYPT_B=`echo ${B} | sed 's/.*gpg-decrypted-successfully\./1/'`
 if [ ${DECRYPT_B} == "1" ]
 then
   DECRYPT_YES=${DECRYPT_YES}" "`echo ${B} | sed 's/\.gpg.*//g'`
 else
   DECRYPT_NO=${DECRYPT_NO}" "`echo ${B} | sed 's/\.gpg.*//g'`
 fi
done

for FILE_A in ${TESTA}
do
 if [ `echo ${DECRYPT_YES} | grep "${FILE_A}" | wc -l` == 1 ]
 then
  echo ${FILE_A}" exist and decrypted"
 elif [ `echo ${DECRYPT_NO} | grep "${FILE_A}" | wc -l` == 1 ]
 then
  echo ${FILE_A}" exist but not decrypted"
 else
  echo ${FILE_A}" not exist"
 fi
done
于 2012-09-04T09:29:22.673 回答