Преобразование массива в строку

Решение python. Входной файл передается в itertools.combinationsиз стандартной библиотеки, которая генерирует 2 кортежа длины -, которые форматируются и печатаются на стандартный вывод.

python3 -c 'from itertools import combinations
with open("file") as f:
    lines = (line.rstrip() for line in f)
    lines = ("{} {}".format(x, y) for x, y in combinations(lines, 2))
    print(*lines, sep="\n")
'
-1
29.06.2020, 12:13
2 ответа

Чтобы разделить строку на массив, вы можете использовать оператор split+glob (, который вызывается, когда вы оставляете раскрытие параметра без кавычек в контексте списка):

test_var=ab_c_de_fg_.txt
root_name=${test_var%.*} # remove extension

IFS=_         # split on _
set -o noglob # disable glob part
array=( $root_name"" ) # split+glob, preserve empty trailing element if any

typeset -p arrayбудет показывать что-то вроде:

typeset -a array=(ab c de fg '')

Чтобы объединить элементы массива с первым символом (байта в ksh )из $IFS, вы делаете "${array[*]}".

Так:

printf '%s\n' "${array[*]:0:2}" "${array[*]:2}"

Будет вывод:

ab_c
de_fg_

И ваши две переменные могут быть определены как:

first_part="${array[*]:0:2}" second_part="${array[*]:2}"
2
18.03.2021, 23:23

Вот один из способов сделать то, о чем просит ваш вопрос вbash(и игнорировать ваш код, так как я не могу понять, что вы пытаетесь с ним сделать):

$ test_var=ab_c_de_fg_.txt
$ read var1 var2 < <(echo "$test_var" | sed 's/_/ /2; s/\.txt$//')
$ echo "$var1"
ab_c
$ echo "$var2"
de_fg_

В сценарии это будет просто:

test_var=ab_c_de_fg_.txt
read var1 var2 < <(echo "$test_var" | sed 's/_/ /2; s/\.txt$//')

Теперь у вас есть $var1и $var2.

Хитрость заключается в использовании readдля чтения двух переменных. Это разделит его ввод на текущее значение переменной среды IFS(, которая по умолчанию представляет собой пробел, табуляцию и новую строку ). Команда sedзаменит 2-й _пробелом(s/_/ /2)и удалит .txtиз конца своего ввода (s/\.txt$//), поэтому то, что передается в read, будет ab_c de_fg_.txt, и потому что посередине есть пробел, каждая строка сохраняется в соответствующей переменной.

1
18.03.2021, 23:23

Теги

Похожие вопросы