Я собираюсь высказать некоторые предположения... vim
не любит if(
так попытка if (
это может быть просто вещью энергии все же.
Я думаю, что Ваша реальная проблема - то, что Вы звоните run_backup
перед созданием его. поместите Ваш function
перед Вашим if then else
блок. оболочка должна знать о функциях, прежде чем она сможет использовать их. это верно для программирования в целом.
Какая реализация join
Вы используете? С join (GNU coreutils) 5.97
, Я могу использовать
[0 1021] ~/temp/jointest % join -a1 -a2 jointest1.txt jointest2.txt
a 1 10
b 2 11
c 12
d 4 13
e 5
и "простые" работы соединения, также (но опускает c и e). Существует -e
опция, которая, предположительно, позволяет Вам выбрать маркер для пустых полей, но это, кажется, повреждается в моей версии и только заполняет случай e, не случай c.
Попробуйте следующее:
> join -e- -a1 -a2 jointest1 -o 0 1.1 1.2 2.1 2.2 jointest2
a a 1 a 10
b b 2 b 11
c - - c 12
d d 4 d 13
e e 5 - -
или
> join -e- -a1 -a2 jointest1 -o 0 1.2 2.2 jointest2
a 1 10
b 2 11
c - 12
d 4 13
e 5 -
Я не уверен, возможно ли достигнуть того же без-o опции.-o опция говорит: сначала распечатайте объединяющее поле, затем поле № 2 из файла 1, затем поле 2 из файла 2. Довольно печальный необходимо знать, что формат файлов заставляет пустые поля работать.
Я написал инструмент Perl именно для этой проблемы ключа, значения:
Объединение правильных строк в пары: любое количество файлы . Он также доступен на GitHub .
Чтобы выполнить его, введите:
merge -k -e "-" jointest1.txt jointest2.txt
-a
. Опция-e
становится безубыточным хуже для меня, ни заполнение, ни записи "e" ни "c". Моя версияjoin (GNU coreutils) 7.4
. – mbaitoff 21.03.2012, 11:31