Сравните два списка строк в bash - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два списка дат в bash, и я хочу найти разницу между ними. Пытаюсь использовать comm, но я не могу понять, как сравнить два сохраненных списка строк (в отличие от вывода команды или файлов).

Немного так:

list1=$(seq 3 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d)
list2=$(seq 7 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d)

comm -1 -3 <"$list1" <"$list2"

# 2020-03-29
# 2020-03-28
# 2020-03-27: No such file or directory

Где это приводит к желаемому выводу:

comm -1 -3 <(seq 3 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d) <(seq 7 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d)

# 2020-03-26
# 2020-03-25
# 2020-03-24
# 2020-03-23

Очевидно, что comm пытается использовать вывод в качестве расположения файлов вместо содержимого, но я не могу понять, как это исправить.

1 Ответ

1 голос
/ 30 марта 2020

Поскольку comm требуется два файла, вот что нужно:

list1="$(seq 3 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d)"
list2="$(seq 7 | xargs -I {} gdate -d "{} days ago" +%Y-%m-%d)"

comm -1 -3 <(printf "%s\n" "$list1") <(printf "%s\n" "$list2")
...