2016-06-22 1 views
1

У меня есть входной файл с данными ниже:Сравнивая данные линии поля на линии в питона или Shell

Mode|Date|Count|timestamp|status 
HR|06/08/2016|3000|Thu Jun 09 2016|Complete 
HR|06/08/2016|3010|Thu Jun 09 2016|Complete 
HR|06/08/2016|2000|Thu Jun 09 2016|Complete 
HR|06/08/2016|2000|Fri Jun 09 2016|Complete 
HR|06/08/2016|1000|Thu Jun 09 2016|Complete 
HR|06/08/2016|1500|Thu Jun 09 2016|Failure 
.... 

Теперь я пытаюсь сравнить каждые две строки, чтобы выяснить, какое поле имеет несоответствие данных. Я попытался несколькими способами использовать скрипт python. Но не повезло. Мой выпуск должен быть ниже

Count Mismatch: 
HR|06/08/2016|3000|Thu Jun 09 2016|Complete 
HR|06/08/2016|3010|Thu Jun 09 2016|Complete 
timestamp Mismatch: 
HR|06/08/2016|2000|Thu Jun 09 2016|Complete 
HR|06/08/2016|2000|Fri Jun 09 2016|Complete 
Count and Status Mismatch: 
HR|06/08/2016|1000|Thu Jun 09 2016|Complete 
HR|06/08/2016|1500|Thu Jun 09 2016|Failure 
.... 

Может ли кто-нибудь помочь мне в этом? Спасибо заранее

ответ

1

Вы можете использовать AWK:

awk 'BEGIN{ 
    FS="|" 
} 
NR==1 { 
    split($0, h, /\|/) 
    next 
} 
NR%2==0 { 
    pr=$0 
    split($0, a, /\|/) 
    next 
} 
{ 
    s = "" 
    for(i=1; i<=NF; i++) 
     if ($i != a[i]) 
     s = sprintf("%s%s", s, (!s? "" : " and ") h[i]) 
    print s, "Mismatch:" ORS pr ORS $0 
}' file 

Count Mismatch: 
HR|06/08/2016|3000|Thu Jun 09 2016|Complete 
HR|06/08/2016|3010|Thu Jun 09 2016|Complete 
timestamp Mismatch: 
HR|06/08/2016|2000|Thu Jun 09 2016|Complete 
HR|06/08/2016|2000|Fri Jun 09 2016|Complete 
Count and status Mismatch: 
HR|06/08/2016|1000|Thu Jun 09 2016|Complete 
HR|06/08/2016|1500|Thu Jun 09 2016|Failur