Предполагая, что вы ссылаетесь на метки узлов, networkx сохраняет индексы только при извлечении матрицы смежности графа. Networkx представляет каждый узел как индекс, и вы можете добавить больше атрибутов, если хотите. Все атрибуты узла, кроме индекса, хранятся в словаре. При создании матрицы смежности графа сохраняются только индексы, поэтому , если вы хотите сохранить только одну строку на узел, при создании графа учитывайте индексирование узлов по этой строке .
bash
Самая короткая фиксация:
if [[ "$var1" = "mtu "* ]]
Bash [[ ]]
не становится расширенным до шарика, в отличие от этого [ ]
(который должен по историческим причинам).
bash --posix
О, я отправил слишком быстро. Оболочка Bourne, не Bash...
if [ "${var1:0:4}" == "mtu " ]
${var1:0:4}
означает первые четыре символа $var1
.
/bin/sh
А-ч, извините. Эмуляция POSIX Bash не заходит достаточно далеко; истинная исходная Оболочка Bourne не имеет ${var1:0:4}
. Вам будет нужно что-то как решение mstrobl.
if [ "$(echo "$var1" | cut -c0-4)" == "mtu " ]
Можно звонить expr
к строкам совпадения против регулярных выражений из сценариев Оболочки Bourne. Ниже, кажется, работает:
#!/bin/sh
var1="mtu eth0"
if [ "`expr \"$var1\" : \"mtu .*\"`" != "0" ];then
echo "match"
fi
Используйте инструменты Unix. Программа cut
счастливо укоротит строку.
if [ "$(echo $var1 | cut -c 4)" = "mtu " ];
... должен сделать то, что Вы хотите.
Я сделал бы следующее:
# Removes anything but first word from "var1"
if [ "${var1%% *}" = "mtu" ] ; then ... fi
Или:
# Tries to remove the first word if it is "mtu", checks if we removed anything
if [ "${var1#mtu }" != "$var1" ] ; then ... fi
Или, как пример = ~ оператор:
if [[ "$var1" =~ "mtu *" ]]
Мне нравится использовать оператор case для сравнения строк.
Тривиальный пример:
case "$input"
in
"$variable1") echo "matched the first value"
;;
"$variable2") echo "matched the second value"
;;
*[a-z]*) echo "input has letters"
;;
'') echo "input is null!"
;;
*[0-9]*) echo "matched numbers (but I don't have letters, otherwise the letter test would have been hit first!)"
;;
*) echo "Some wacky stuff in the input!"
esac
Я делал сумасшедшие вещи вроде
case "$(cat file)"
in
"$(cat other_file)") echo "file and other_file are the same"
;;
*) echo "file and other_file are different"
esac
И это тоже работает, с некоторыми ограничениями, например, файлы не могут быть больше пары мегабайт, а оболочка просто не видит нулей, поэтому, если один файл полон нулей, а другой их нет (и ни у кого нет ничего другого), этот тест не будет увидеть разницу между ними.
Я не использую сравнение файлов в качестве серьезного примера, а только пример того, как оператор case может выполнять гораздо более гибкое сопоставление строк, чем доступно с test, expr или другим похожие выражения оболочки.
В оболочке Bourne, если я хочу проверить, содержит ли строка другую строку:
if [ `echo ${String} | grep -c ${Substr} ` -eq 1 ] ; then
Enclose echo $ {String} | grep -c $ {Substr}
с двумя обратными кавычками `
:
Чтобы проверить, находится ли подстрока в начале или в конце:
if [ `echo ${String} | grep -c "^${Substr}"` -eq 1 ] ; then
...
if [ `echo ${String} | grep -c "${Substr}$"` -eq 1 ] ; then