У меня была очень похожая проблема с 13,04 (но она вместо этого жаловалась что openssh-client
быть установленным является БОЛЕЕ НОВЫМ, чем требуемый тот).
Оказывается, что источники программного обеспечения были настроены для загрузки с серверы, локальные для страны, где я нахожусь (Кувейт).
Я решил его путем открытия приложения Ubuntu Software Center, затем движения в "Редактирование> Источники программного обеспечения", затем на вкладке Ubuntu Software я изменяю Donwload с выпадающего списка на "Основной Сервер".
Я затем работал sudo apt-get update
сопровождаемый sudo apt-get upgrad
e и наконец sudo apt-get install openssh-server
и на этот раз это установило без помехи.
Вы можете использовать SED
, подобный этому:
sed 'h;s/,[^|]*//g;x
/,/{s/|[^,|]*,*/|-/g;H;}
x;s/-\([^|]\)/\1/g;P;D'
Это завело, будучи относительно простым в конце концов. Применение того, что маленький сценарий к вашим данным получает:
key1|0|11881|0|0|0|0|11769|0|0|0
key2|2027|345|0|1|0|2040|364|0|1|0
key2|-|712|-|-|-|-|729|-|-|-
key3|0|670944|0|0|0|0|495554|0|0|0
key4|1847|1|0|0|0|1814|1|0|0|0
key4|-|21|-|-|-|-|22|-|-|-
key5|1880|11|0|154|0|1886|11|0|151|0
key5|-|402|-|-|-|-|397|-|-|-
key6|1|65|0|8|0|16684|51|0|8|0
key6|1|4570|-|-|-|0|4176|-|-|-
key6|19137|-|-|-|-|-|-|-|-|-
key7|1851|11|0|202|0|1856|13|0|193|0
key7|-|757|-|-|-|-|751|-|-|-
в основном SED
просто решает каждое поле с обоих концов. Сначала он экономит копию своей текущей итерации в H
старого пространства. Затем SED
удаляет все, от каждого поля после первой запятой. После этого SED
выключается обратно к сохраненной копии, поэтому он может удалить поле, которое он просто сохранен в другом буфере.
Если запятые остаются, добавляет вторую копию к первому следующему вставленным \ N
символ EWLINE, так что он может резать как минимум еще раз, когда P; D
P
Rint Затем D
Elete только до первого происхождения \ N
символ EWLine в области шаблона перед началом с тем, что остается.
Я бы не использовал awk для этого, потому что я думаю, что ему нужны более гибкие структуры данных. Я бы использовал Perl:
perl -MList::Util=max -F'\|' -lane '
$key = shift @F;
@data = map {[split /,/]} @F;
do {
@row = map {shift(@$_) // "-"} @data;
print join("|", $key, @row);
$max = max map {scalar @$_} @data;
} while ($max > 0);
' file
key1|0|11881|0|0|0|0|11769|0|0|0
key2|2027|345|0|1|0|2040|364|0|1|0
key2|-|712|-|-|-|-|729|-|-|-
key3|0|670944|0|0|0|0|495554|0|0|0
key4|1847|1|0|0|0|1814|1|0|0|0
key4|-|21|-|-|-|-|22|-|-|-
key5|1880|11|0|154|0|1886|11|0|151|0
key5|-|402|-|-|-|-|397|-|-|-
key6|1|65|0|8|0|16684|51|0|8|0
key6|1|4570|-|-|-|0|4176|-|-|-
key6|19137|-|-|-|-|-|-|-|-|-
key7|1851|11|0|202|0|1856|13|0|193|0
key7|-|757|-|-|-|-|751|-|-|-