Это твоя идея? Быстрый грязный пример:
$ sort -V -t, -k 1 lookup.csv > lookup_sorted.csv
$ sort -V -t, -k 10 section_ne.csv > section_ne_sorted.csv
$ join -1 10 -2 1 -t, section_ne_sorted.csv lookup_sorted.csv
5.6,X,172.29.7.227,172.29.7.227,,,,N-D,,,a6gpaa56.175,,,,,,,,,,,,,,56.153
5.6,X,is181,10.5.5.181,,,,N-D,,,a6gpaa56.453,,,,,,,,,,,,,,56.153
5.6,X,Detected_at_10.5.5.121,10.5.5.121,,,,N-A,,,a6gpaa56.462,,,,,,,,,,,,,,56.153
5.6,X,eyup,10.5.5.91,,,,C-A,,,a6gpaa56.557,,,,,,,,,,,,,,56.153
5.6,X,is107,10.5.5.107,,,,N-A,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
5.6,X,is172,10.5.5.172,,,,N-F,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
5.6,X,is179,10.5.5.179,,,,N-D,,,a6gpaa56.561,,,,,,,,,,,,,,56.153
join: file 2 is not in sorted order
join: file 1 is not in sorted order
Вы можете получить часовой пояс из /etc/timezone
файла:
cat /etc/timezone
Используйте tzselect на современных Linux-серверах. запустите tzselect и начните детализировать подсказки.
~]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
1) Africa
2) Americas
3) Antarctica
4) Arctic Ocean
5) Asia
6) Atlantic Ocean
7) Australia
8) Europe
9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#?
Извините, я только что -прочитал ваш исходный пост. похоже, вам нужен скриптовый способ получить часовой пояс. Я оставлю это на случай, если это поможет, но, возможно, это не то, что вам нужно.
Названия географических часовых поясов являются одновременно и абстракцией, и удобством. Под капотом файлы данных часового пояса представляют собой двоичные файлы, в которых перечислены смещения, разрывы и изменения летнего времени, но не местоположение (, даже если имя файла указывает на это, отсюда и проблема с/etc/localtime
). Существует сопоставление местоположения и даты со смещением часового пояса, но это не 1 :1 — например, учитывая вывод date
, вы не можете легко и детерминистически определить используемое географическое местоположение (. ] но вы можете вычислить набор совместимых на текущую дату; или вы могли бы, приложив некоторые усилия, проверить более ранние даты на наличие разрывов, чтобы вывести местоположение ).
Существует основной список имен зон , а файлы определения часовых поясов выглядят так:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/London -0:01:15 - LMT 1847 Dec 1 0:00s
0:00 GB-Eire %s 1968 Oct 27
1:00 - BST 1971 Oct 31 2:00u
0:00 GB-Eire %s 1996
0:00 EU GMT/BST
Link Europe/London Europe/Jersey
Link Europe/London Europe/Guernsey
Link Europe/London Europe/Isle_of_Man
При создании двоичного Europe/London
файла указанные правила обрабатываются для создания временных правил (временных меток, где что-то изменяется, проверяется с помощью zdump -v Europe/London
), а соответствующие местоположения получают псевдонимы. Содержимое файла localtime
или вывод date
из любого из вышеуказанных мест будут неразличимы.
Абстракция позволяет обрабатывать юридические изменения во времени, например
# TZ=Europe/Andorra date -d "Aug 31 1984"
Fri Aug 31 00:00:00 CET 1984
TZ=Europe/Andorra date -d "Aug 31 1985"
Sat Aug 31 00:00:00 CEST 1985
(Андорра не входит в ЕС, но с 1985 года следует правилам перехода на летнее время в ЕС)
/etc/localtime
— это (двоичный файл данных часового пояса ), в Debian по соглашению он должен быть символической ссылкой на именованный файл географического часового пояса в соответствии с ''Stretch''(9 )и ''Buster''(10)localtime
справочных страниц:
The /etc/localtime file configures the system-wide timezone of the local system that is used by applications for presentation to the user. It should be an absolute or relative symbolic link pointing to /usr/share /zoneinfo/, followed by a timezone identifier such as "Europe/Berlin" or "Etc/UTC". The resulting link should lead to the corresponding binary tzfile(5) timezone data for the configured timezone.
Because the timezone identifier is extracted from the symlink target name of /etc/localtime, this file may not be a normal file or hardlink.
Если это так:
if [ -L /etc/localtime ]; then
IFS=/ read -a TZFILE < <(readlink -f /etc/localtime)
printf -v TZNAME "%s/%s\n" ${TZFILE[-2]} ${TZFILE[-1]}
echo $TZNAME
fi
В более ранних версиях (или если кто-то не следил за документацией ), это была копия файла данных часового пояса. Итак, чтобы убедиться, что /etc/localtime
и /etc/timezone
совпадают, вам нужно сравнить их:
$ diff -s /etc/localtime /usr/share/zoneinfo/`cat /etc/timezone`
Files /etc/localtime and /usr/share/zoneinfo/America/New_York are identical
Если вам нужно работать в обратном направлении,или быть тщательным:
read CHECK file < <(sha256sum /etc/localtime)
while read sum file; do
[[ "$sum" == "$CHECK" ]] && printf "%s\n" "$file"
done < <(find /usr/share/zoneinfo/ -type f |xargs sha256sum)
Это не совсем переносимый ответ. (POSIX не определяет и не требует этих длинных имен , они исходят от ICANN/IANA ), и вы используете systemd
команды на этих версиях Debian.