Описание тега bed-bugs
Вот немного СЭД
сценарий, который я написал для себя не так давно. У меня просто было хоть немного весело обновления. Он делает всю работу сам:
ХДС() { Макс= _d=
дело "${1#-}" в (у) \Макс=')\(';; (Д) _d='\
'; _d="$_d\\2$_d";; (*) ! :;;эсок && сдвиг
СЭД 'с/ */ /г;ч;1ч;1д;х;:Т
с/ *\(.*\(\П\)\)\([^ ]\{1,\}\) */\2\3 \1/;ТТ
с/ / /г;ч;$!д;ы/.*/ & /;:Н
/\( \([^ ]\{1,\}\) \)\(.*'"$\Макс 1${_d:+.*}\)/{
с//\3${_d:- }"'/;с/$\н*//;ТН
}; с/.* \н\н*//;с/ *//;с// /г
с/\н\н/ /г;г/ \н/\н /' "$@"
сбросить -в _d-Макс
}
ООО
строительство двух линий одновременно на перестановка полей во входных данных для выравнивания по столбцам - и стеки свою работу в провести буфер между каждой линии. Это не размежевать на что-либо иное, чем оригинальный разделитель пространства в вашем примере (и я первоначально написал это, чтобы ручка опять
разделены арг массивы) - и это при условии, что разделитель является твердой, полей любой разумной длины, содержащий наиболее подходящий характер, но разделитель все должны работать так же хорошо.
Так оно (L1COL1\nL2COL1) (L1COL2\nL2COL2)...((Л[12]С1)\nL3COL1)...
так долго, как это необходимо, пока не встретит последнюю строчку. К тому времени он уже так аккуратно расставлено все данные в своей памяти, что это тривиальный вопрос, чтобы проверить на дубликаты - и поэтому он печатает столбцов только один раз независимо от того, сколько раз они появляются в ввода:
ХДС <<\колонками
1 А 4 З 1
2 Б 3 Г 2
3 C 2 Х 3
4 Д 1 Ш 4
5 Е 0 Ю 5
Седла
Выход
А Б В Г Д Е
4 3 2 1 0
З Г Х Ш
1 2 3 4 5
Но с -у
флага он печатает только уникальные предметы, так что...
ХДС -у <<\колонками
1 А 4 З 1
2 Б 3 Г 2
3 C 2 Х 3
4 Д 1 Ш 4
5 Е 0 Ю 5
Седла
...получает...
А Б В Г Д Е
4 3 2 1 0
З Г Х Ш
Или -D для только дубликаты, с дополнительной запись на дублирующие колонки. Не так уж и плохо...
ХДС -д <<Данные\
1 1 А А 4 З 1
2 2 Б Б 3 Г 2
3 3 Ч 2 Х 3
4 4 Д Д 1 Ш 4
5 5 Е Е 0 Ю 5
Данные
1 2 3 4 5
1 2 3 4 5
А Б В Г Д Е