2016-08-28 2 views
0

То, что я пытаюсь сделать, это изменить формат одного конкретного файла в другой:

input.csv:

value1,value2,value3,value4,value5,value6 

output.txt:

value2:value3 

Я могу почти сделать это, используя следующие, но все это получает считаны на той же линии, а не к множественным:

output=$(while IFS="," read -r value1 value2 value3 remainder; do echo $value2:$value3 ; done < "input.csv") 
echo $output > output.txt 

решить мою собственную проблему, добавив \ в конце эхо строки

ответ

0

Fixed путем добавления обратной косой черты «\» в конце эхо строки

1

С awk:

awk -F',' '{printf "%s:%s\n", $2, $3}' file.csv 

Печать разделенная запятыми вторая и третья колонка с : в качестве разделителя.

Пример:

% awk -F',' '{printf "%s:%s\n", $2, $3}' <<<'value1,value2,value3,value4,value5,value6' 
value2:value3 
0

Если переменная output не требуется ничего другого вы можете сэкономить идентификатор некоторые горя, удалив подстановку команды

while IFS=',' read -r value1 value2 value3 remainder; do 
    echo "$value2:$value3" 
done 

Более прочный и общий способ обработки ввода csv - использовать awk, как показано на этапе https://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html

awk 'BEGIN {FPAT="([^,]*)|(\"[^\"]+\")"; OFS=":"} {print $2,$3}'