1

から

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ループを試してみましたが、成功しませんでした。

4

5 に答える 5

3

for ループを使用して文字列の 1 つの文字を反復処理し、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
于 2013-04-05T12:08:03.923 に答える
1

Python ワンライナー

$ 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
$
于 2013-04-05T15:47:26.450 に答える
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
于 2013-04-05T12:03:48.530 に答える
-1

文字列の代わりに配列を作成する場合は、次を使用KSできます。LEVELSpaste

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[@]})
于 2013-04-05T12:10:49.227 に答える