6

awk を使用して、特定の区切り記号を使用して文字列を配列に分割しています。ここで、配列の各要素に対して何らかの操作を実行したいと思います。

次のような単一の要素を抽出できます。

#! /bin/bash

b=12:34:56
a=`echo $b | awk '{split($0,numbers,":"); print numbers[1]}'`
echo $a

私はこのようなことをしたい:

#! /bin/bash

b=12:34:56
`echo $b | awk '{split($0,numbers,":");}'`
for(i=0;i<length(numbers);i++)
{
   // perform some operation using numbers[i]
}

bash スクリプトでこのようなことを行うにはどうすればよいですか?

4

5 に答える 5

19

これらの回答はどれも awk を使用していませんでした(奇妙な)。awk を使用すると、次のようなことができます。

echo 12:34:56 | awk '{split($0,numbers,":")} END {for(n in numbers){ print numbers[n] }}'

print numbers[n]あなたがしたいことは何でも置き換えてください。

于 2015-11-20T15:01:41.313 に答える
16

そのために awk は本当に必要ありません.bashはそれ自体で文字列処理を行うことができます.

試す:

b=12:34:56
for element in ${b//:/ } ; do
  echo $element
done

カウンターが必要な場合、それを追加するのは非常に簡単です。

bash で文字列操作を行うにはどうすればよいですか? を参照してください。bash で直接できることの詳細については、 を参照してください。

于 2013-10-26T12:50:02.793 に答える
6
b=12:34:56
IFS=:
set -- $b
for i; do echo $i; done

これにはバシズムは含まれていませんが、すべての sh で機能します。

于 2013-10-26T13:02:21.817 に答える
1

awk を使用せず、組み込みの「宣言」を使用する別の優れた方法:

b=12:34:56

# USE IFS for splitting (and elements can have spaces in them)
IFS=":"
declare -a elements=( $b )
#show contents
for (( i=0 ; i < ${#elements[@]}; i++ )); do
    echo "$i= ${elements[$i]}"
done
于 2013-12-01T10:21:36.657 に答える