사용자에게 재생될 코덱 파일은 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
)의 첫 번째 인수로 제공할 수 있습니다.
그런 다음 이 네 가지 awk
호출은
- 배열의 두 번째 열과 세 번째 열이 모두 비어 있지 않은 모든 행(열 헤더를 포함하는 첫 번째 행 무시)에 대한 사용자 이름(첫 번째 열 값)을 저장합니다.
fully_played
- 두 번째와 세 번째 열이 모두 비어 있는 배열에 모든 행의 사용자 이름을 저장합니다.
not_played
- 두 번째 열은 비어 있지 않지만 세 번째 열은 비어 있는 배열의 모든 행의 사용자 이름을 저장합니다.
codec1_played
- 두 번째 열은 비어 있지만 세 번째 열은 비어 있지 않은 배열에 모든 행의 사용자 이름을 저장합니다.
codec2_played
호출 이후의 모든 줄은 awk
배열이 올바르게 채워졌음을 증명하기 위해서만 존재합니다.