파일(1000줄 이상)이 있는데 어떤 형식으로든 출력을 가져와야 합니다. 각 행에 몇 개의 행이 있는지 확인해야 합니다 thr
. 아래의 경우에는 3 thr
개가 있고 5, 4, 2는 각각 각 행의 개수입니다 thr
.
입력하다:
19608250477[thr=22321]: Res90 at
1: 0x00007f1fb38d5089
2: 0x00007f1fb5565c79
3: 0x00007f1fbb097775
4: 0x00007f1fbb034a69
5: 0x00007f1fbb035467
19601889333[thr=19068]: Res87 at
1: 0x00007f1fc15f86c0
2: 0x00007f1fc1a27d7c
3: 0x00007f1fc1d0f312
4: 0x00007f1fc1caf054
16236545786[thr=55528]: Res67 at
1: 0x00007f1fb4959a90
2: 0x00007f1fb557ad94
아래와 같은 출력이 필요합니다.
thr=22321 ; Count 5 # Count number of lines for each thr ; Each content will start with number (1: and finish with some numebr
thr=19068 ; Count 4
thr=55528 ; Count 2
답변1
awk -F'[]=[]' '
function print_count() {
printf "thr=%d ; Count %d\n", key, count
}
$2 == "thr" {if (key) print_count(); key = $3; count = 0; next}
{count++}
END {print_count()}
' file
이는 ]
또는 필드 구분 기호 =
로 사용됩니다.[
답변2
또 다른 이상한:
awk -F'[][]' '
function p_c () {
print a" ; Count "b
}
NF == 3 {
if ( f )
p_c()
a = $2
f = 1
next
}
{
b = $1
sub ( ":.*" , "" , b )
}
END {
p_c()
}
' infile
답변3
또 다른 awk
솔루션은 레코드 및 필드 구분 기호 정의를 활용합니다.
$ awk -v RS="[0-9]+[[]" -v FS="\n" -v OFS=";" '$0 {gsub(/[]].*/, "", $1); print $1,"Count "NF-2}' input