这
KS=$(locate acpi-support | grep "/etc/rc" | cut -f4 -d/ | tr -dc '[K,S]')
LEVELS=$(locate acpi-support | grep "/etc/rc" | cut -f3 -d/ | tr -dc '[0-9]')
echo $KS
echo $LEVELS
我得到以下输出:
KSSSS
12345
我想做的是以这种方式合并以前的输出:
K1 S2 S3 S4 S5
我尝试嵌套 for 循环,但没有成功,我怎么能这样做?
答案 0 :(得分:3)
您可以使用for循环迭代其中一个字符串中的字符,然后使用bash的子字符串功能打印出字符。如下所示:
KS="KSSSS"
LEVELS="12345"
unset result
for (( i=0; i<${#KS}; i++ )); do
result+="${KS:$i:1}${LEVELS:$i:1} "
done
echo "$result"
输出:
K1 S2 S3 S4 S5
答案 1 :(得分:1)
$ KS=KSSSS
$ LEVELS=12345
$ awk '{n=length/2;for(i=1;i<=n;i++)print $i$(i+n)}' ORS=" " FS= <<< "$KS$LEVELS"
K1 S2 S3 S4 S5
答案 2 :(得分:1)
Python one-liner
$ KS="KSSSS"
$ LEVELS="12345"
$ python -c 'import sys; print " ".join([k+v for k,v in zip(sys.argv[1], sys.argv[2])])' $KS $LEVELS
K1 S2 S3 S4 S5
$
答案 3 :(得分:0)
这应该有效:
KS="KSSSS"
LEVELS="12345"
for i in {0..4}; do
echo ${KS:$i:1}${LEVELS:$i:1}
done
虽然肯定awk
大师会以更好的单行方式来救援:)
使其显示在同一行:
for i in {0..4}; do
echo ${KS:$i:1}${LEVELS:$i:1} | awk '{printf("%s ",$1)}
done
答案 4 :(得分:-1)
如果您使用KS
和LEVELS
数组而不是字符串,则可以使用paste
:
KS=( $(locate acpi-support | grep "/etc/rc" | cut -f4 -d/ | tr -dc '[K,S]') )
LEVELS=( $(locate acpi-support | grep "/etc/rc" | cut -f3 -d/ | tr -dc '[0-9]') )
paste -d"\0" <( printf "%s\n" ${KS[@]}) <( printf "%s\n" ${LEVELS[@]})