我有两个文件,我应该如何比较使用外壳和awk脚本这些文件(I have two files, how

2019-07-31 08:04发布

我有两个文件

文件中的内容

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文件 从文件中的我们检查* .xml文件存在于文件B,并检查是否已经成功解密。

能否请你帮我这个。

提前致谢。

问候,史密塔

Answer 1:

awk 'FNR==NR{a[$2".gpg"];next}(($5 in a) && ($0~/decrypted/))' filea fileb


Answer 2:

创建一个脚本名为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脚本,(仍然需要的grep,sed的,切割和WC寿):

#!/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


Answer 3:

这里有一个脚本:

#!/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
$ 


文章来源: I have two files, how should i compare these files using shell and awk script