Захват отдельной ячейки столбца в GNU Bash 4.2.46 (2) - PullRequest
2 голосов
/ 11 октября 2019

Я пытаюсь захватить отдельные ячейки файла из нескольких строк и нескольких столбцов, используя сценарии Bash. Мне нужно сделать это с чистым Bash. Мое назначение не позволит мне использовать tcl, awk, sed, perl, python и т. Д. Это часть гораздо более крупной функции - единственная ошибка - это одна строка кода.

Я написал ипроверил мой скрипт ниже на GNU Bash 4.4.19 (1) и он работает! Проблема в том, что школьный сервер, на котором это будет оцениваться, использует GNU Bash 4.2.46 (2). Сценарий не работает на школьном сервере.

Он выводит ячейку в строке 1, столбце 1 файла с именем table. Каждый столбец разделен вкладками. Каждая строка создается с новой строки.

cat table | cut -f 1 -d$'\n' | cut -f 1 > outputFile

Приведенный выше код не работает на Bash 4.2.46 (2). Будет выведен первый столбец. Но не индивидуальная ячейка, которую я ищу.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Вы не используете чистый Bash, вы вызываете внешние программы, такие как cat, tail и head. Различие между ними и sed или awk с точки зрения вашего назначения не описано в вашем посте.

Я надеюсь, что вы действительно знаете свои требования, поскольку ваше текущее решение не квалифицируется как Bash-only.

Это будет решение в чистом Bash:

read line < table; [[ $line =~ ^[^$'\t']* ]];  printf "${BASH_REMATCH[0]}" > outputFile

Кроме того, версия Bash не имеет ничего общего с тем, как работают tail или cat, поскольку они являются отдельными программами, как и сам bash. Возможно, проблема в том, что на школьном сервере есть более старые версии, в основном все.

0 голосов
/ 11 октября 2019

Из комментариев и предложений, которые я получил для этого поста, а также проб и ошибок, я решил использовать следующий формат, который позволяет мне выбирать строку командой head, получать один список с хвостом,а затем номер столбца с надрезом:

cat table | head -n 1 | tail -n 1 | cut -f1 > outputFile

Я выбрал обрезку, если мне нужен другой столбец. Мне нужно это для цикла.

Я также исправлен. Решение не было "чистым ударом". Мое задание позволило кошку, голову, хвост и порезать. Но другие языки, такие как sed, awk и т. Д., Были запрещены.

Спасибо всем за вклад. Это был самый поучительный опыт для начинающего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...