Удаление суффикса не работает в сценарии оболочки - PullRequest
0 голосов
/ 07 июня 2019

В моем сценарии оболочки я хочу прочитать csv файл строка за строкой и удалить префикс и суффикс из одного столбца.

вот пример input.csv:

192.168.0.1, user1, "2zG7CBKp5d4z"
192.168.0.2, user2, "9vy6J,M2A3b6"
192.168.0.3, user3, "V5q,8mvz#$ac"

вот мой код:

#!/bin/bash

filename="$1"

while IFS="," read f1 f2 f3
do
        f3="${f3#\"}"
        f3="${f3%\"}"
        echo "$f1" "$f2" "$f3"

done <"$filename"

В сценарии с while я хочу ssh разместить ($f1) с пользователем ($f2) и пароль ($f3), но необходимо удалить двойную кавычку из f3.Часть ssh будет реализована позже.Удаление префикса работает как положено, а суффикс - нет.Кто-нибудь может сказать мне, почему?

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Удаление трейлинга " работает для меня. Я подозреваю, что ваши строки и, следовательно, f3 не заканчиваются на ", а на \r - первая часть разрыва строки в Windows (\r\n), в отличие от разрыва строки Unix (\n).

Конвертируйте ваш файл, используя dos2unix original или tr -d \\r < original > converted.

Кстати, последнее поле читается правильно только потому, что оно последнее. Обычно read интерпретирует запятую внутри последнего поля как начало нового поля - read не придает кавычкам особого значения. Однако read будет считывать все оставшиеся поля в последнюю заданную переменную, в этом случае f3.

0 голосов
/ 07 июня 2019

Если последняя длина поля постоянна, cut эффективно избавляется от кавычек:

rev input.csv | cut -c2-13,15- | rev

Если все длины полей постоянны, * 1007 не требуется*:

cut -c-20,22-33 input.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...