여러 열이 있는 탭으로 구분된 파일이 있습니다. A열에 내용이 표시되는 횟수를 늘리고 A열의 값과 관련된 데이터를 새 B열에 인쇄하고 싶습니다.
전:
1 blue
1 green
1 red
100 blue
100 red
다음을 읽는 출력 파일을 원합니다.
3 1 blue,green,red
2 100 blue,red
awk나 Perl을 사용하여 이 작업을 수행할 수 있습니까?
답변1
전혀:
{
if (count[$1] == "") {
count[$1] = 1;
results[$1] = $2;
} else {
count[$1] = count[$1] + 1;
results[$1] = results[$1] "," $2;
}
}
END {
for (number in count) {
print count[number],number,results[number];
}
}
결과는 다음과 같습니다.
2 100 blue,red 3 1 blue,green,red
위의 샘플 데이터에 대해.
결과의 순서는 귀하가 원하는 것과 다를 수 있습니다. 이것이 귀하에게 얼마나 중요한지 잘 모르겠습니다.
답변2
내가 시도한 방법은 다음과 같습니다. 참고: "\011"
= 탭 문자, 공백을 위해 로 변경 " "
)
awk 'BEGIN { s = "\011"; c = "," ; cnt = 0; all_colors = "" } {
if ( NR == 1 ) { num = $1; colors[cnt++] = $2 }
else {
if ( num != $1 ) {
for (x=0; x<cnt; x++) {
all_colors = all_colors colors[x]
}
print cnt s num s all_colors; cnt = 0; all_colors = ""
num = $1; colors[cnt++] = $2
}
else { colors[cnt++] = c $2 }
}
}
END {
all_colors = ""
for (x=0; x<cnt; x++) { all_colors = all_colors colors[x] }
print cnt s num s all_colors
}' tab_file
tab_file output
1 blue 3 1 blue,green,red
1 green 2 100 blue,red
1 red
100 blue
100 red