Сценарий сравнения

Я новичок в сценариях оболочки, и мне нужна помощь. У меня две строки:

Expected Dates: 12/17/2012 12/18/2012 12/19/2012 12/20/2012 12/21/2012 12/22/2012 12/23/2012
Eimx/MDW Dates: 12/17/2012 12/18/2012 12/19/2012 12/20/2012 12/21/2012 12/22/2012

Я хочу сравнить их и отобразить недостающие данные.

Я хочу использовать для этого сценарий .sh, как я могу это сделать?

0
nl ja de
Являются ли эти строки в одном файле?
добавлено автор Atropo, источник
ваш пример выглядит как простой случай. Возможно ли, что 12/18/2012 будет отсутствовать со 2-й линии, а все остальные даты? И это оставит «отверстие» в строке, или пустое место все еще будет в конце строки. Не отвечайте в качестве комментария, пожалуйста, обновите (отредактируйте ссылку) свой вопрос и используйте инструмент форматирования {} в верхней части окна ввода, чтобы отложить ваши примеры в виде образцов кода. Удачи.
добавлено автор shellter, источник
да строка в том же файле
добавлено автор Iuliana, источник

1 ответы

Вопрос совсем не определен, но может быть что-то вроде:

#!/bin/sh

s1='Expected Dates: 12/17/2012 12/18/2012 12/23/2012'
s2='Eimx/MDW Dates: 12/17/2012 12/18/2012'
s1=${s1#*:}  # Trim the header (or start the loop in awk at i=3 )
s2=${s2#*:}

printf "$s1\n$s2\n" | awk  '
    NR==1 {for( i=1; i<=NF; i++) a[$i]=1 }
    NR==2 {for( i=1; i<=NF; i++) { if( ! a[$i] ) print $i; delete a[$i]; }}
    END{ for( i in a) print i}'
0
добавлено
@luliana Какие детали нужно объяснять? Назначаются две строки. Текст удаляется и включает первый : . Две строки печатаются как отдельные строки и передаются на awk . Читая первую строку, awk строит массив. При чтении второй строки любая дата, которая не отображается в массиве, печатается, а те, которые находятся в массиве, удаляются. В конце напечатано все, что осталось в массиве.
добавлено автор William Pursell, источник
@luliana «Инверсия» является просто следствием того, что массив awk печатается обратно в псевдослучайном порядке. Если порядок имеет значение, ассоциативный массив не является достаточным без дополнительной информации для поддержания этого порядка.
добавлено автор William Pursell, источник
Спасибо за помощь !
добавлено автор Iuliana, источник
Большое спасибо, но можете ли вы подробно объяснить мне код, пожалуйста? Большое спасибо за помощь снова :)
добавлено автор Iuliana, источник
Привет, спасибо за помощь. Я понимаю из [$ i] = 1, что каждая позиция для элемента из массива becames 1.At и первая строка инвертирована, что означает '12/17/2012 12/18/2012 12/23/2012 ''12/23 /' becames '12/23/2012 12/18/2012 12/17/2012 '. Я понял, хорошо? И если да, то почему эта инверсия необходима?
добавлено автор Iuliana, источник
Хорошо, спасибо вам большое за помощь, Уильям.
добавлено автор Iuliana, источник