Shell сравнить и пометить - PullRequest
       6

Shell сравнить и пометить

0 голосов
/ 15 марта 2011

У меня есть 2 файла list.txt и fail.txt. Это список тестовых случаев и неудачных тестовых случаев. Мне нужно отметить сбой в отношении тестовых случаев, которые появляются в fail.txt в list.txt. Мне это нужно в оболочке

Ответы [ 3 ]

2 голосов
/ 16 марта 2011

Может быть, вам стоит изучить команду join?

sed 's/$/ FAIL/' fail.txt |
join -a 1 -e PASS -j 1 -o 1.1,2.2 list.txt -

list.txt

/work/supernova/alpha/net-nsf.c
/work/supernova/alpha/net-nsf.h
/work/supernova/alpha/nsfpipe.c
/work/supernova/alpha/sqcrypto.c
/work/supernova/alpha/sqlmutil.c
/work/supernova/alpha/squtil.c
/work/supernova/beta/scb.h
/work/supernova/delta/delta-init.c
/work/supernova/delta/delta-pseudo.c
/work/supernova/delta/onvproc.c
/work/supernova/gamma/mt-aio.c
/work/supernova/gamma/mt-aio.h
/work/supernova/gamma/mtblk.c
/work/supernova/gamma/mt.c
/work/supernova/gamma/mtdll.c
/work/supernova/gamma/mt.h
/work/supernova/gamma/mt-info.c
/work/supernova/gamma/mtm.h
/work/supernova/gamma/mtpool.c
/work/supernova/gamma/mtpseudo.c
/work/supernova/gamma/session.c
/work/supernova/gamma/session.h
/work/supernova/omega/jlm.c
/work/supernova/omega/osenv.c
/work/supernova/omicron/mivp.c

fail.txt

/work/supernova/alpha/net-nsf.c
/work/supernova/alpha/net-nsf.h
/work/supernova/alpha/sqcrypto.c
/work/supernova/beta/scb.h
/work/supernova/delta/delta-init.c
/work/supernova/delta/delta-pseudo.c
/work/supernova/gamma/mt-aio.c
/work/supernova/gamma/mt-aio.h
/work/supernova/gamma/mtblk.c
/work/supernova/gamma/mt-info.c
/work/supernova/gamma/mtpool.c
/work/supernova/gamma/session.h
/work/supernova/omega/jlm.c

выход

/work/supernova/alpha/net-nsf.c FAIL
/work/supernova/alpha/net-nsf.h FAIL
/work/supernova/alpha/nsfpipe.c PASS
/work/supernova/alpha/sqcrypto.c FAIL
/work/supernova/alpha/sqlmutil.c PASS
/work/supernova/alpha/squtil.c PASS
/work/supernova/beta/scb.h FAIL
/work/supernova/delta/delta-init.c FAIL
/work/supernova/delta/delta-pseudo.c FAIL
/work/supernova/delta/onvproc.c PASS
/work/supernova/gamma/mt-aio.c FAIL
/work/supernova/gamma/mt-aio.h FAIL
/work/supernova/gamma/mtblk.c FAIL
/work/supernova/gamma/mt.c PASS
/work/supernova/gamma/mtdll.c PASS
/work/supernova/gamma/mt.h PASS
/work/supernova/gamma/mt-info.c FAIL
/work/supernova/gamma/mtm.h PASS
/work/supernova/gamma/mtpool.c FAIL
/work/supernova/gamma/mtpseudo.c PASS
/work/supernova/gamma/session.c PASS
/work/supernova/gamma/session.h FAIL
/work/supernova/omega/jlm.c FAIL
/work/supernova/omega/osenv.c PASS
/work/supernova/omicron/mivp.c PASS

Пока файлы в отсортированном порядке, должны работать как шарм. Если вам не нужны отметки PASS, пропустите пару аргументов -e PASS. Если вы хотите другую метку FAIL, настройте скрипт sed. Если вам нужен другой порядок для выходных столбцов, измените параметр -o.

1 голос
/ 15 марта 2011

Вы можете попробовать с grep и его -f и -v опцией

grep -v -f file1 file2
grep -v -f file2 file1
0 голосов
/ 15 марта 2011

без того, чтобы вы делились форматом ваших файлов, вот предположение:

awk '
    NR == FNR {failed[$1]; next} 
    ($1 in failed) {print "failed: " $0; next} 
    1
' fail.txt list.txt > marked.txt

обновление:

awk '
    NR == FNR {failed[$1]; next} 
    {
      status = ($1 in failed) ? "Fail" : "Pass"
      print $0, status
    }
' fail.txt list.txt > marked.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...