Использование Миллера(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 без пустых строк
rm /data/log || true
только (по моему скромному опыту )полезно, если скрипт выполняется с set -e
. set -e
завершает работу оболочки, когда команда завершается с ошибкой. Создатель скрипта явно не знал о флаге -f
для rm
.
${value: -1}
, вероятно, опечатка. Это должно быть ${value:-1}
, что обеспечивает значение по умолчанию (1, а не -1; -
является частью синтаксиса :-
)для расширения переменной, если value
имеет значение null или не установлено.
Если это действительно должно быть ${value: -1}
, см. ответ Гленна Джекмана для фактического значения.
Из Баша (1 ):${параметр :-слово} Используйте значения по умолчанию. Если параметр не установлен или равен нулю, расширение слова заменен. В противном случае подставляется значение параметра.
|| true
гарантирует, что команда возвращает true. ||
— это короткий -замыкающий оператор ИЛИ, если команда впереди возвращает false, выполняется команда после нее и используется возвращаемое значение.
${value: -1}
расширяется до последнего символа содержимого переменной. ${value:-1}
отличается от от ${value: -1}
!
Ссылка на Расширение параметров оболочки в руководстве:
${value:-1}
расширяется до содержимого переменной value
или, если переменная не установлена или пуста, до строки «1»
${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.