Чтение из csv, добавление новой переменной в переменные - bash - PullRequest
0 голосов
/ 15 апреля 2020

Я пишу bash скрипт для чтения строк из csv и помещения их в переменные. Однако чтение добавляет новую строку к переменным. Я пытался удалить их, но это не работает.

В этом случае ROW2 печатается как -

Testing - line1
        - line2

Однако с ROW1 все в порядке Мой сценарий:

sed '1d' export.csv | while IFS=,read -r ROW1 ROW2
do 
  ROW2=${ROW2%$'\n'}
  echo ROW2
done < export.csv

export.csv:

abc,Testing

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Это может быть лучше для вас, если вы удалите первую строку файла, чтобы избежать обработки заголовков CSV:

#!/bin/bash
while IFS=, read -r ROW1 ROW2
do
  echo $ROW1 $ROW2
done < <(sed '1d' export.csv)

Это использует метод, называемый подстановка процесса чтобы передать вывод команды sed на вход while.

При этом у меня не возникает проблем с переводами строк в переменные.

Вы можете путать перевод строки, созданный командой echo. Например, если мы запустим приведенный выше скрипт и передадим вывод в hexdump, мы увидим, какие символы новой строки действительно существуют:

# ./test.sh | hexdump -C
00000000  61 62 63 20 54 65 73 74  69 6e 67 0a              |abc Testing.|

В выводе присутствует один символ перевода строки (0a) и он создается командой echo. Чтобы доказать это, мы можем добавить флаг -n к вызову echo (echo -n $ROW1 $ROW2) для подавления новой строки:

# ./test.sh | hexdump -C
00000000  61 62 63 20 54 65 73 74  69 6e 67                 |abc Testing|
0000000b
0 голосов
/ 15 апреля 2020

Попробуйте (я исправил некоторые опечатки в вашем коде):

sed '1d' export.csv | while IFS=, read -r ROW1 ROW2
do 
  ROW1=${ROW1%$'\n'}
  echo $ROW1 $ROW2
done 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...