Ваша проблема должна быть лучше определена, но рассмотрение Вашего демонстрационного входа, я высказываю предположение относительно того, что Вы хотите сделать. Используйте маленький сценарий AWK как это:
#!/bin/bash
awk '! /START-OF-/ {
if (MODE=="DEFINE") { HEADER=HEADER $0 "|" }
else if ((MODE=="DATA") && (NF>0)) { print }
}
/START-OF-FIELDS/ { MODE="DEFINE"; HEADER="" }
/START-OF-DATA/ {
print HEADER
MODE="DATA"
HEADER=""
}' | sed 's/|$//'
Это производит:
ID|NAME|DEPT
1|joy|cs
2|sam|ec
ID |NAME|DOB|DEPT|ADDRESS
5|joe|13/2/2001/|ee|street1
3|gwen|4/08/1999|cs|street2
Примечание: Я ленив, таким образом, я добавляю вертикальную панель после каждого поля в заголовке. Затем я использую команду SED для удаления запаздывающих V-панелей впоследствии.
Создайте ls-эквивалентный скрипт, используя bash или python.
Некоторые псевдонимы, которые я уже использовал ранее для поиска жестких ссылок:
псевдонимы findHardLinkedFiles_SortByInode='find . -тип f -ссылок +1 -printf "inode=%i %s=размер ссылок=%n file=%p \n". | сортировать -n'
псевдоним findHardLinkedFiles_SortBySize='find . -тип f -ссылок +1 -printf "%s=размер ссылок=%n inode=%i file=%p \n". | сортировка -n'
Как раскрасить вывод терминала:
https://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal
https://stackoverflow.com/questions/287871/print-in-terminal-with-colors-using-python
Основываясь на ответе KIAaze, я придумал свою модификацию: (Сделано в Ubuntu 14.04 с coreutils 8.21)
Установить: (без изменений) -- убедитесь, что у вас включены deb-src репозитории --
sudo apt-get build-dep coreutils
apt-get source coreutils
cd coreutils-8.21
(Запишите, какие пакеты были установлены во время команды "build-dep coreutils", они понадобятся вам для очистки в конце).
Модификации кода: (патч доступен здесь)
Добавлено: "C_EXEC_HARDLINK" и "em":
enum indicator_no { C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK, C_FIFO, C_SOCK, C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID, C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK, C_EXEC_HARDLINK, C_CLR_TO_EOL }; static const char *const indicator_name[]= { "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so", "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st", "ow", "tw", "ca", "mh", "em", "cl", NULL };
Установка цвета по умолчанию:
static struct bin_str color_indicator[] = { { LEN_STR_PAIR ("\033[") }, /* lc: Left of color sequence */ { LEN_STR_PAIR ("m") }, /* rc: Right of color sequence */ { 0, NULL }, /* ec: End color (replaces lc+no+rc) */ { LEN_STR_PAIR ("0") }, /* rs: Reset to ordinary colors */ { 0, NULL }, /* no: Normal */ { 0, NULL }, /* fi: File: default */ { LEN_STR_PAIR ("01;34") }, /* di: Directory: bright blue */ { LEN_STR_PAIR ("01;36") }, /* ln: Symlink: bright cyan */ { LEN_STR_PAIR ("33") }, /* pi: Pipe: yellow/brown */ { LEN_STR_PAIR ("01;35") }, /* so: Socket: bright magenta */ { LEN_STR_PAIR ("01;33") }, /* bd: Block device: bright yellow */ { LEN_STR_PAIR ("01;33") }, /* cd: Char device: bright yellow */ { 0, NULL }, /* mi: Missing file: undefined */ { 0, NULL }, /* or: Orphaned symlink: undefined */ { LEN_STR_PAIR ("01;32") }, /* ex: Executable: bright green */ { LEN_STR_PAIR ("01;35") }, /* do: Door: bright magenta */ { LEN_STR_PAIR ("37;41") }, /* su: setuid: white on red */ { LEN_STR_PAIR ("30;43") }, /* sg: setgid: black on yellow */ { LEN_STR_PAIR ("37;44") }, /* st: sticky: black on blue */ { LEN_STR_PAIR ("34;42") }, /* ow: other-writable: blue on green */ { LEN_STR_PAIR ("30;42") }, /* tw: ow w/ sticky: black on green */ { LEN_STR_PAIR ("30;41") }, /* ca: black on red */ { 0, NULL }, /* mh: HardLink: disabled by default */ { 0, NULL }, /* em: Executable HardLink: disabled by default */ { LEN_STR_PAIR ("\033[K") }, /* cl: clear to end of line */ };
Вы можете установить свои собственные цвета либо выше, либо в вашем скрипте .bashrc, как это:
export LS_COLORS="ln=01;36:mh=01;36:em=01;33";
см: Что означают разные цвета в терминале?
Установите правило приоритета:
{ type = C_FILE; if ((mode & S_ISUID) != 0 && is_colored (C_SETUID)) type = C_SETUID; else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID)) type = C_SETGID; else if (is_colored (C_CAP) && f->has_capability) type = C_CAP; else if ((1 stat.st_nlink) && (mode & S_IXUGO) != 0 && is_colored (C_EXEC_HARDLINK)) type = C_EXEC_HARDLINK; else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC)) type = C_EXEC; else if ((1 stat.st_nlink) && is_colored (C_MULTIHARDLINK)) type = C_MULTIHARDLINK; }
Затем скомпилируйте: (команда должна быть запущена от имени пользователя, не root)
debuild -us -uc -b
Вы можете запустить вышеуказанную команду несколько раз, так как она будет очищать компиляцию каждый раз (в случае, если вы хотите сделать свои собственные настройки).
(как сказал KIAaze, она может вернуть ошибку в конце, связанную с тестом, но команда "ls" работает нормально).
Наконец, заменяем "ls":
sudo mv /bin/ls /bin/ls.orig
sudo mv src/ls /bin/ls
Очистка:
cd ..
rm -rf coreutils*
sudo apt-get remove <list of packages installed by 'build-dep coreutils'>
Лично я считаю, что раскраска жестких ссылок в первую очередь произвольна. Я считаю, что лучше выделить количество ссылок в длинном списке, когда оно> = 2. Вы можете увидеть это в моем сценарии-оболочке ls по адресу: