Как написать динамический bash скрипт для печати данных строк и столбцов и обновления тех же данных в том же файле? [закрыто]

-1
09.09.2016, 07:39
1 ответ

подстановка команд заключена в двойные кавычки в (t) csh (который вы, кажется, используете), как в оболочках типа Борна.

Итак, в:

alias search "find `pwd` -name "

Вы фактически делаете что-то вроде:

alias search 'find /some/dir -name '

Где / some / dir был текущим каталогом на момент выполнения команды alias .

Здесь вы хотите:

alias search 'find $cwd:q -name'

$ cwd автоматически устанавливается tcsh (как и $ PWD в современных версиях, например, в оболочках POSIX), поэтому вы можно использовать его вместо менее эффективного и менее надежного `pwd` .

Мы используем одинарные (строгие) кавычки, чтобы не раскрывать внутри $ cwd .

$ cwd: q - передать значение переменной как один аргумент, а не позволить ему разделиться.

Также обратите внимание, что вам не нужен пробел после -name выше.

Если вы хотите использовать pwd (например, чтобы получить канонический (без символических ссылок) путь к текущему рабочему каталогу, как в некоторых реализациях pwd , таких как GNU) когда POSIXLY_CORRECT не находится в среде), вы должны использовать:

alias search 'find "`pwd`" -name'

Хотя это не сработает, если путь к текущему каталогу содержит символы новой строки.

Обратите внимание, что вы не можете использовать sudo search , поскольку псевдонимы раскрываются только в позиции команды в (t) csh. В оболочках POSIX вы можете:

alias sudo='sudo '

Сообщать оболочке, что слово, следующее за sudo , также должно подвергаться расширению псевдонима, но этот трюк не работает в (t) csh.

Эквивалент POSIX sh (или bash / zsh / ksh ...) будет иметь следующий вид:

alias search='find "$PWD" -name'
-121) --- 57925-

Этот сценарий awk должен помочь вам начать работу:

BEGIN { FS = "," }
$1 {
    if ($1 == "end_" tablename) {
        exit 0;
    } else if ($1 == "start_" tablename) {
        in_table = 1;
    } else if ($1 == tablename) {
        count = split($0, columns);
    }
    next;
}

in_table {
    for (i = 2; i <= NF; i++) {
        values[i] = values[i] "," $i;
    }
}

END {
    for (i = 2; i <= count; i++) {
        if (columns[i]) {
            print columns[i] " - " substr(values[i], 2);
        }
    }
}

Назовите его так:

awk -f config.awk -v tablename=interfaces_setup config.csv
1
28.01.2020, 05:10

Теги

Похожие вопросы