1

スクリプトを書いていますが、次のようなファイルを区切りました。

1|Anderson|399.00|123                                  
2|Smith|29.99|234                                  
3|Smith|98.00|345                                   
4|Smith|29.98|456                                   
5|Edwards|399.00|567  
6|Kreitzer|234.56|456

これは、「Smith」を含む行の1列目のすべての値を取得するawkステートメントです。

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

出力は次のようになります。

2 3 4

どうすればそれを作成できるので、awkの増分として値を配列に入力することもできます。私はこれを試しました:

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1}' customer)

編集:後でスクリプトに入力すると、

echo ${array[1]} 

何も出力しません。

4

3 に答える 3

1

あなたのコードは正しいようです!おそらく、私はあなたの質問を正しく持っていないかもしれませんか?

実行の最後に配列に格納されている値を出力するようにコードを少し拡張しました。また、print値が出力される直前にステートメントがあります。

echo $(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; arr[count]=$1; print $1} END { print "Printing the inputs"; for (i in arr) print  arr[i] }' customer)
2 3 4 Printing the inputs 2 3 4

さらに、他の例については、このサイトを参照してください。

于 2013-03-11T07:01:46.987 に答える
0

あなたの質問はあまり明確ではありません。このようなものをお探しですか?

awk -F "|" '$2=="Smith" {arr[count++]=$1}
            END {n=length(arr); for (i=0;i<n;i++) print (i+1), arr[i]}' in.file

出力

1 2
2 3
3 4
于 2013-03-11T07:22:45.277 に答える
0

簡単な解決策を見つけました。awkの出力を変数に設定します。次に、変数を配列に変換します。

list=$(awk -F '|' 'BEGIN {count=0;} $2=="Smith" {count++; print $1}' customer)

array=($list)

タイピング:

echo ${array[1]}

配列の2番目のエントリを提供します

于 2013-03-11T08:03:02.967 に答える