2016-08-25 5 views
0

Я читаю текстовый файл по строкам в сценарии bash. Текстовый файл, который я читаю, является разделенным вкладкой csv. Однако, когда я пытаюсь вырезать строку чтения, это не работает, кажется, что \ t преобразуется в пустое место где-то t Вкладка потеряна в скрипте bash

Ниже код не является что я делаю окончательно - я еще не выполнил фактическую рабочую нагрузку для кода, пока данные не будут надежно прочитаны.

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv) 
echo $currline |cut -f2 
done 

теперь, когда я меняю две строки, как показано ниже работает

for ((currlineno=2 ; $currlineno <= $maxlines ; currlineno++)); do 
currline=$(sed -n "$currlineno"p "$IMPORT_TABLE".csv |tr '\t' ';') 
echo $currline |cut -f2 -d ';' 
done 

, но я не могу это сделать так, как мой текстовый файл также содержит «;» ',' а также '.' в полях. Tab - единственный приемлемый вариант для меня, поскольку мои поля никогда не будут содержать его.

+1

Цитата: 'echo '$ currline" | cut -f2' – anubhava

+0

Или лучше пропустить 'currline' и использовать:' sed -n '$ currlineno "p" $ IMPORT_TABLE ".csv | cut -f2' – anubhava

+0

Спасибо. На самом деле, мне нужно будет извлечь каждое поле с вырезом, и я хочу, чтобы не читать файл для каждых 30 полей. Поэтому цитирование переменной выполняло эту работу для меня. THANKS –

ответ

1

Это потому, что вы не дважды указываете свою переменную.

tabbed=$'a\tb' 
echo $tabbed : "$tabbed" 

Когда Баш видит переменные вне кавычек, он применяет слово расщепления на его содержание, и echo просто выводит его параметры разделены пробелами. Двойные кавычки делают значение одним параметром, даже если оно содержит пробелы, символы новой строки и т. Д.

Смежные вопросы