2016-11-05 2 views
1

Я хочу сравнить имена файлов Today.txt с Main.txt. Если есть совпадение, распечатайте все 6 столбцов совпадающего файла Main.txt с новым файлом say matched.txt.Как сравнить файлы с разными столбцами в unix?

и файлы, которые не совпадающие с Main.txt, затем список имени файла и время TODAY.txt в новом файле сказать unmatched.txt

Main.txt

date  filename   timestamp space count status 
Nov 4 +CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

Сегодня. TXT

filename  time 
CHCK01_20161104.txt 06:03 
CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
AR01_20161104.txt 09:36 
AR02_20161104.txt 09:36 
ifs01_20161104.txt 21:16 
TRIPS11_20161104.txt 09:16 

Обязательный выход: matched.txt

Nov 4 +CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

unmatched.txt

CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
ifs01_20161104.txt 21:16 

Не могли бы вы мне помочь в этом, пожалуйста?

Большое спасибо!

ответ

0

awk на помощь!

$ awk 'FNR==1{next} 
     NR==FNR{a[$1]=$2; next} 
     $3 in a{print; delete a[$3]} 
      END{for(k in a) print k,a[k] > "unmatched"}' today main > matched 

$ head *matched 

==> matched <== 
Nov 4 CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

==> unmatched <== 
ifs01_20161104.txt 21:16 
CHCK09_20161104.txt 21:46 
CHCK05_20161104.txt 11:10 
+0

Для вкладок разделителей выхода можно установить '-v OFS = '\ t'' – karakfa

+0

У меня есть вопрос для вас. Я печатаю файлы, находящиеся в каталоге inprogress, с примером символа плюс (+). Ноябрь 4 + CHCK01_20161104.txt 06:39 2.15M 17153 on_time Файлы, которые находятся в inprogress, будут добавлены с символом плюс (+), и другие файлы будут с тем же именем в main.txt Я хочу, чтобы файлы с символом + и другие файлы в моем требуемом выходе (согласованы). Пожалуйста, предложите, как мне сравнить main.txt и Today.txt, чтобы получить соответствие и unmatched.txt? Большое спасибо ! – Barcode

0

С awk, по одному для каждого matched и unmatched

$ awk 'NR==FNR{a[$1]; next} $3 in a{print > "matched.txt"}' Today.txt Main.txt 
$ cat matched.txt 
Nov 4 CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

$ awk 'NR==FNR{a[$3]; next} !($1 in a) && FNR>1{print > "unmatched.txt"}' Main.txt Today.txt 
$ cat unmatched.txt 
CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
ifs01_20161104.txt 21:16 
  • Logic похоже, инициализировать массив a с требуемой колонкой первого аргумента файла в awk
  • Затем в зависимости от того файла из второго файла должны присутствовать или нет в a, распечатать требуемый выходной файл


С grep и awk комбинации:

$ grep -Ff <(awk 'NR>1{print $1}' Today.txt) Main.txt 
Nov 4 CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 

$ grep -vFf <(awk 'NR>1{print $3}' Main.txt) Today.txt | tail -n+2 
CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
ifs01_20161104.txt 21:16 
0

Вот ответ, используя мощность трубы.

tail -n +2 /tmp/today | while read a b; do \ 
    if ! grep $a /tmp/main >> /tmp/matched; then \ 
     echo $a $b; \ 
    fi; \ 
done > /tmp/unmatched 

Объяснение

печати/TMP/сегодня для первой линии

tail -n +2 /tmp/today 

Прочитайте файл в двух переменных

while read a b 

кроме Grep $ A в/TMP/основная и хранить в архиве

grep $a /tmp/main >> /tmp/matched 

Если Grep возвращается ненулевой то эхо $ а и $ Ь

echo $a $b 

Выход:

[email protected]:~# cat /tmp/matched 
Nov 4 CHCK01_20161104.txt 06:39 2.15M 17153 on_time 
Nov 4 AR01_20161104.txt 09:31 0.04M 433  On_Time 
Nov 4 AR02_20161104.txt 09:31 0.00M 7  On_Time 
Nov 4 TRIPS11_20161104.txt 09:03 0.00M 24  On_Time 
[email protected]:~# cat /tmp/unmatched 
CHCK05_20161104.txt 11:10 
CHCK09_20161104.txt 21:46 
ifs01_20161104.txt 21:16 
[email protected]:~#