У меня есть две переменные, которые содержат набор строк. Мне нужно объединить результаты этих переменных, чтобы они появлялись рядом.
Переменная a
имеет:
t
t
t
Переменная b
имеет:
xyz
pqr
stu
Мне нужно получить вывод как
txyz
tpqr
tstu
Используя paste
с заменой процесса:
paste -d '' <(echo "$a") <(echo "$b")
<()
шаблон замены процесса, вывод команды внутри будет заменен дескриптором файла, это необходимо, поскольку paste
берет файлы в качестве входа
d ''
наборы разделитель как пустой указатель, по мере необходимости
Пример:
$ echo "$a"
t
t
t
$ echo "$b"
xyz
pqr
stu
$ paste -d '' <(echo "$a") <(echo "$b")
txyz
tpqr
tstu
На ударе можно сделать это с заменой процесса и paste
:
$ a='t
t
t'
$ b='xyz
pqr
stu'
$ paste <(echo "$a") <(echo "$b") -d ''
txyz
tpqr
tstu
, Если бы все Вы хотите, t
снабжены префиксом к строкам b
, awk
или sed
сделал бы:
$ printf "%s" "$b" | awk '{printf "t"}1'
txyz
tpqr
tstu
/etc/profile
с командой /etc/profile
. По-видимому, OP хотела считать файл, но если они хотели к , выполняют файл в текущей оболочке (который разумен, поскольку это - конфигурационный файл для оболочек), который был бы сделан с эти source
команда, и полномочия не будут проблемой - Вас разрешают source
файлы, которые можно считать, и это выполняет их в текущей оболочке. source
поэтому довольно опасная команда - удостоверяются, что Вы знаете то, что находится в файле перед определением источника его!
– Zanna
25 January 2018 в 11:00
Я не уверен, как это выдерживает сравнение для эффективности, но возможное чистое решение для удара могло бы быть
while IFS= read -r -u3 x; IFS= read -r -u4 y; do
printf '%s%s\n' "$x" "$y";
done 3<<<"$a" 4<<<"$b"
Если все, что Вы действительно хотите, является 3 словами, запускающимися с t
, можно сделать это:
$ echo $VAR_2 | awk '{print "t"$0}'
txyz
tpqr
tstu
Или это:
$ echo $VAR_2 | sed 's/^/t/g'
txyz
tpqr
tstu
Если у Вас есть несколько (и отличающийся) слова в переменных, они не предоставляют себя приятно для одновременной обработки, таким образом, я предложил бы использовать array
вместо переменных.
$ array1=( 't' 't' 't' )
$ array2=('xyz' 'pqr' 'stu' )
$ for i in $(seq 0 2) ; do echo "${array1[$i]}""${array2[$i]}" ; done
txyz
tpqr
tstu