С этой командой:
cmd param | grep 'foo1\|foo5\|foo7'
Я добираюсь
foo1=bar1
foo5=bar5
foo7=bar7
как я заставляю этот вывод записать в файл CSV?
в конечном счете я хотел бы выполнить команду в цикле с параметрическим усилителем, изменяющимся для каждого цикла (следовательно вывод), таким образом, будет полезно, если файл станет как:
cat output.csv
foo1=bar1, foo5=bar5, foo7=bar7
foo1=value, foo5=value, foo7=value
Вот другая острота:
echo $(cmd param | grep 'foo1\|foo5\|foo7') | sed 's/ /, /g' | tee -a output.csv
Команда: echo $(cmd param | grep 'foo1\|foo5\|foo7')
распечатает вывод в линейной форме.
Это помещает запятую, промежуточную переменные: sed 's/ /, /g'
Это добавляет вывод к новой строке в конце файла: tee -a output.csv
Был бы это работать на Вас:
cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,$//'
tr '\n' ','
замените каждый возврат строки'',sed 's/,$//'
удалите последний знак, если это'',И если Вы хотите поместить его в файл CSV, можно добавить, что '\n' в конце строки затем перенаправляет его к файлу CSV:
cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,\?$/\n/' >> file.csv
sed 's/,\?$/\n/'
Удалит последний символ, если это будет'', и добавьте '\n'>>
используется для добавления в конце файла CSV, не удаляя то, что уже внутриИспользуя Perl Вы, получите шаблон, может присоединиться к нему и распечатать его для всех желаемых файлов:
perl -0nE 'say join(",",/(foo\d+=\w+)/g)' ex* > out
Это избежит Вашего внешнего цикла