После длинного канала, который заканчивается grep, я правильно получаю набор подходящих абсолютных путей / файлов и сопоставляю строку, разделенную запятой для каждого. Я хочу пометить каждый файл соответствующей строкой. Сложно также то, что в пути есть пробелы, но между разделителем и предыдущими и последующими символами нет пробелов.
Мне нужно иметь дело с абсолютным путем, а не только с именем файла в каталоге. Строки соответствия являются space_free, но имя файла может быть не таким:
Так, в качестве примера, вывод канала может выглядеть следующим образом:
pipe1 | pipe2 |
outputs
/Users/bloggs/Directory One/matched_file.doc,attributes_0001ABC
/Users/bloggs/Directory One/matched_file1.doc,attributeY_2
/Users/bloggs/Directory One/match_file_00x.doc,Attribute_00201
/Users/bloggs/Directory One/matching file 2.doc,attribute_0004
Я хочу пометить каждый, используя что-то, что вероятно, будет включать:
tag --add "$attribute" "$file"
Где атрибут относится к строке совпадения, например, "Attribute_00201"
Обычно я просто скажу, например:
tag --add Attribute_00201 /Users/bloggs/Directory\ One/match_file_00x.doc
На данный момент Я застрял, как в идеале анализировать каждую строку через другой канал и правильно обрабатывать пробелы и выполнить команду тега. Благодарен за любую помощь
Итак, я ищу новый канал, pipe3 для выполнения или выдачи мне правильно отформатированной команды тега:
pipe1 | pipe2 | pipe3
delivers eg
tag --add Attribute_00201 /Users/bloggs/Directory\ One/match_file_00x.doc
etc
etc
Кажется, это работает
| tee >(cut -f2 -d","| sed 's/^/tag --add /' > temp_out.txt) >(cut -d"," -f1 | sed -e 's/[[:space:]]/\\ /g' > temp_out1.txt) > /dev/null && paste -d' ' temp_out.txt temp_out1.txt > command.sh && chmod +x ./command.sh