Назначение двоеточия при переменном расширении

Использование Миллера(https://github.com/johnkerl/miller)и sed

1)' \
then reorder -f 4,5,1,2,3 \
then put 'if($2=~"Fru"){$1="";$2="";$3=""}' \
then cut -x -f count

у вас будет

+------------------------+--------------------------------------+--------------------+------------------+----------------------------------------+
| 0bef-82-46-8a-9a0b.xml | Fruits/Mango Apple /Plum cherry date | 0bef-82-46-8a-9a0b | 5da-0-ba-c1-1a9  | Fruits/Pear Banana/Plum orange mango   |
| 0bef-82-46-8a-9a0b.xml | Fruits/Mango Apple /Plum cherry date | 0bef-82-46-8a-9a0b | ac-94-4ab-91-23  | Fruits/Pear Banana/Plum orange mango   |
| 0bef-82-46-8a-9a0b.xml | Fruits/Mango Apple /Plum cherry date | 0bef-82-46-8a-9a0b | 5z-94-ab-92-2f3  | Fruits/Pear Banana/Plum orange mango   |
| 952f-82-46-8a-9a0b.xml | Fruits/Mango                         | -                  | -                | -                                      |
| 3cff-82-46-8a-9a0b.xml | Fruits/Big Mango/Not Sweet           | -                  | -                | -                                      |
| 6m0k-82-46-8a-9a0b.xml | Fruits/Big Pear/Very Sweet           | -                  | -                | -                                      |
| 17a-42-df-c24.xml      | Fruits Market/Big Apple/Sweet        | 17a-42-df-c24      | 54-ba-4411-9-3d8 | Veg/Radish /Radish Carrot Celery Onion |
| 17a-42-df-c24.xml      | Fruits Market/Big Apple/Sweet        | 17a-42-df-c24      | 2da5-0-4a-b1-e89 | Veg/Radish /Radish Carrot Celery Onion |
| 17a-42-df-c24.xml      | Fruits Market/Big Apple/Sweet        | 17a-42-df-c24      | b7-94-4db-92-2f3 | Veg/Radish /Radish Carrot Celery Onion |
| 17a-42-df-c24.xml      | Fruits Market/Big Apple/Sweet        | 17a-42-df-c24      | 4d-67c-446-b5-ac | Veg/Radish /Radish Carrot Celery Onion |
| 17a-42-df-c24.xml      | Fruits Market/Big Apple/Sweet        | 17a-42-df-c24      | 2-8b-4det-87-769 | Veg/Radish /Radish Carrot Celery Onion |
+------------------------+--------------------------------------+--------------------+------------------+----------------------------------------+

Примечание:В качестве входных данных я использовал CSV без пустых строк

2
26.09.2020, 17:59
3 ответа

rm /data/log || true только (по моему скромному опыту )полезно, если скрипт выполняется с set -e. set -eзавершает работу оболочки, когда команда завершается с ошибкой. Создатель скрипта явно не знал о флаге -fдля rm.

${value: -1}, вероятно, опечатка. Это должно быть ${value:-1}, что обеспечивает значение по умолчанию (1, а не -1; -является частью синтаксиса :-)для расширения переменной, если valueимеет значение null или не установлено.

Если это действительно должно быть ${value: -1}, см. ответ Гленна Джекмана для фактического значения.

3
18.03.2021, 23:02

Из Баша (1 ):${параметр :-слово} Используйте значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова заменен. В противном случае подставляется значение параметра.

|| trueгарантирует, что команда возвращает true. ||— это короткий -замыкающий оператор ИЛИ, если команда впереди возвращает false, выполняется команда после нее и используется возвращаемое значение.

0
18.03.2021, 23:02

${value: -1} расширяется до последнего символа содержимого переменной.

${value:-1}отличается от от ${value: -1}!

Ссылка на Расширение параметров оболочки в руководстве:

  1. ${value:-1}расширяется до содержимого переменной valueили, если переменная не установлена ​​или пуста, до строки «1»

  2. ${value: -1}— это краткая форма формы ${var:offset:length}для извлечения подстроки содержимого переменной. Смещение -1означает «один символ с конца строки». Часть :lengthотсутствует, поэтому подстрока берется от offsetдо конца строки.

    В инструкции написано:

    Note that a negative offset must be separated from the colon by at least one space to avoid being confused with the ‘:-’ expansion.

8
18.03.2021, 23:02

Теги

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