Функция Bash: в двумерный массив удалить строку и столбец, обозначенные одним индексом - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь создать функцию bash (basciallay, поместите в мой bashrc).

Цель состоит в том, чтобы удалить строку и столбец, проиндексированные числом (целым числом), это число является вторымаргумент функции bash ($2), а первый аргумент - имя файла ($1).

Я пробовал это, но не могу заставить его работать (я работаю под MacOS Mojave):

function remove_line_column() { gsed '"$2"d' $1 | awk -v ind_field=$2 '!(ind_field="")' ;}

Я делаю путаницу между expanding Shell arguments (как "$2") и Shell arguments (как только $2).

В прямой командной строке я могу получить требуемыйрезультат (удаление 8-й строки и 8-го столбца), выполнив:

awk 'NR == 8 {next} {print}' file.txt | awk '!($8="")'

Как реализовать ее как функцию bash?

Я хотел бы вызвать ее из терминала следующим образом:

$remove_line_column file.txt 8`

Любая помощь приветствуется, С уважением

1 Ответ

3 голосов
/ 13 октября 2019
remove_line_column() {
  awk -v remove="$2" 'NR == remove {next} {$remove = ""; print}' <"$1"
}

... используется как:

$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9'
1 2 3
4 5 6
7 8 9
$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9' | remove_line_column /dev/stdin 2
1  3
7  9
$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9' | remove_line_column /dev/stdin 3
1 2
4 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...