ユーザーに再生されるコーデックファイルはCODEC=welcome1.g711u,Announcementbui4.g711u
。
ログを見ると、ユーザーに再生されるコーデックファイルがgrepされ、E41.csv
ファイルに保存されます。
両方のコーデックに対してユーザーのCSVファイルコンテンツを正しく再生します。
users,codec1,codec2
9188888881,welcome1.g711u,Announcementbui4.g711u
9177777772,welcome1.g711u,Announcementbui4.g711u
9166666663,welcome1.g711u,Announcementbui4.g711u
9155555554,welcome1.g711u,Announcementbui4.g711u
9144444445,welcome1.g711u,Announcementbui4.g711u
csvファイルの内容は5人のユーザーのうち1人で、コーデックは再生されず、ユーザーはすぐに通話を切断します。 [ユーザー 9177777772 注意]
users,codec1,codec2
9188888881,welcome1.g711u,Announcementbui4.g711u
9177777772,
9166666663,welcome1.g711u,Announcementbui4.g711u
9155555554,welcome1.g711u,Announcementbui4.g711u
9144444445,welcome1.g711u,Announcementbui4.g711u
welcome1
同様に、一度だけプレイした後に接続を切断するユーザーがいるかもしれませんが、これはAnnouncement
同じです。
9188888881,welcome1.g711u,Announcementbui4.g711u
9177777772,welcome1.g711u
9166666663,,Announcementbui4.g711u
9155555554,welcome1.g711u,Announcementbui4.g711u
9144444445,welcome1.g711u,Announcementbui4.g711u
- コーデック全体の再生[ユーザー]を配列に保存したいです。
-(fully_played[]).
- コーデックを再生しないユーザーは配列に保存されます。
-(not_played[]).
- ユーザーだけが再生するウェルカムコーデックは配列に保存されます。
-(codec1_played[])
- ユーザーにのみ再生されるお知らせコーデックを配列として保存
-(codec2_played[]).
私が今まで試したこと:
codec12="$( awk -F, '{if (($2 == "welcome1.g711u") && ($3 == "Announcementbui4.g711u")) { print $1 } }' $CURRENTPATH/E41.csv | head)"
{ printf "%s\n" "$codec12"; }>$CURRENTPATH/codec12.csv
name=( $(awk '{print $1}' $CURRENTPATH/codec12.csv) )
echo ${name[*]}
len4=${#name[*]}
echo $len4
4を返す
.csvファイルにリダイレクトして配列に保存するのではなく、退屈に見えます。 awkパターンマッチングを配列に保存する方法はありますか?
答え1
ユーザーIDをbash配列に保存したいので、複数の呼び出しを避けることはできないようですawk
。次の bash スクリプトで操作を実行する必要があります。
#!/bin/bash
fully_played=( $(awk -F, 'FNR>1 && $2 && $3 {print $1}' "$1") )
not_played=( $(awk -F, 'FNR>1 && !$2 && !$3 {print $1}' "$1") )
codec1_played=( $(awk -F, 'FNR>1 && $2 && !$3 {print $1}' "$1") )
codec2_played=( $(awk -F, 'FNR>1 && !$2 && $3 {print $1}' "$1") )
echo "Fully played: ${#fully_played[@]} - ${fully_played[@]}"
echo "Not played: ${#not_played[@]} - ${not_played[@]}"
echo "Codec1 played: ${#codec1_played[@]} - ${codec1_played[@]}"
echo "Codec2 played: ${#codec2_played[@]} - ${codec2_played[@]}"
CSVファイルをシェルスクリプト($1
)の最初の引数として提供できます。
それからこれらの4つのawk
呼び出しは
- 配列の2番目と3番目の列の両方が空でないすべての行(列ヘッダーを含む最初の行を無視)のユーザー名(最初の列値)を格納します。
fully_played
- 2番目と3番目の列の両方が空の配列に、すべての行のユーザー名を保存します。
not_played
- 2番目の列は空ではありませんが、3番目の列は空の配列のすべての行のユーザー名を格納します。
codec1_played
- 2番目の列は空ですが、3番目の列は空ではない配列にすべての行のユーザー名を格納します。
codec2_played
呼び出し後のすべての行は、配列がawk
正しく入力されたことを証明するためにのみ存在します。