У меня есть труба, которая дает мне строки из двух строк в кавычках, разделенных пробелами. Используя echo, чтобы дать вам пример содержимого канала:
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""
"filename1" "some text 1"
"filename2" "some text 2"
Первая строка - это имя файла, а вторая - текст, который я хочу добавить в этот файл.
Получить дескриптор $ filename и $ text с помощью «read» очень просто:
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""|
while read filename text; do echo $text $filename; done
"some text 1" "filename1"
"some text 2" "filename2"
но "параллель" не хочет обрабатывать две строки в строке как два параметра. Кажется, к ним относятся как к одному.
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""|
parallel echo {2} {1}
"filename1" "some text 1"
"filename2" "some text 2"
Так что просто наличие {1} в строке дает тот же результат
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""|
parallel echo {1}
"filename1" "some text 1"
"filename2" "some text 2"
Добавление --colsep ' '
делает разрыв строки в каждом пробеле
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""|
parallel --colsep ' ' echo {2} {1}
"some "filename1"
"some "filename2"
Я просто не смог найти объяснения о том, как обрабатывать этот случай через трубу к параллели в его документации https://www.gnu.org/software/parallel/man.html
Добавление опции --delimiter ' '
дает это
echo -e "\"filename1\" \"some text 1\"\n\"filename2\" \"some text 2\""|
parallel --delimiter ' ' echo {2} {1}
"filename1"
"some
text
1"
"filename2"
"some
text
2"
Это самое близкое, что я нашел
seq 10 | parallel -N2 echo seq:\$PARALLEL_SEQ arg1:{1} arg2:{2}
seq:1 arg1:1 arg2:2
seq:2 arg1:3 arg2:4
seq:3 arg1:5 arg2:6
seq:4 arg1:7 arg2:8
seq:5 arg1:9 arg2:10
но это не совсем отражает мои данные, так как seq 10
имеет новую строку после каждой строки, и у меня есть две строки в строке.
1
2
3
4
5
6
7
8
9
10
Мой текущий обходной путь - просто заменить канал на запятую вместо пробела для разделения строк в кавычках на строку:
echo -e "\"filename1\",\"some text 1\"\n\"filename2\",\"some text 2\""|
parallel --colsep ',' echo {2} {1}
"some text 1" "filename1"
"some text 2" "filename2"
Но как справиться с этим параллельно?