첫 번째 열을 기반으로 기존 목록에서 새 목록을 생성합니다.

첫 번째 열을 기반으로 기존 목록에서 새 목록을 생성합니다.

다음 형식의 목록이 있습니다.

group1;visitor1,visitor2,visitor3,
group2;visitor4,visitor5

위 목록에서 다음을 통해 목록을 생성해야 합니다.

group1,visitor1
group1,visitor2
group1,visitor3
group2,visitor4
group2,visitor5

답변1

이것은매우~처럼배열과 함께 AWK 사용그리고 다른 문제들. 주요 아이디어는 두 번째 필드부터 시작하여 첫 번째 필드 앞의 별도 줄에 각 필드를 인쇄하는 것입니다.

이 경우 필드 구분 기호를 ,or 로 지정 ;하고 빈 필드가 인쇄되지 않는지 확인합니다(주어진 데이터의 첫 번째 행 끝에 빈 필드가 있음). OFS명령줄에 설정한 변수는 -v출력 필드를 구분하는 데 사용되는 출력 구분 기호 문자열이며 NF줄의 필드 수입니다.

awk -F '[,;]' -v OFS=',' '{ for (i = 2; i <= NF; ++i) if ($i != "") print $1, $i }' file

문제의 데이터가 주어지면 다음이 생성됩니다.

group1,visitor1
group1,visitor2
group1,visitor3
group2,visitor4
group2,visitor5

답변2

이는 다음과 같이 GNU sed를 사용하여 수행할 수 있습니다.

sed -r 's:,$::;y:;,:,;:;:l;s:^(([^,]+)[^;]+);:\1\n\2,:;tl' file

각 입력 줄에 대해 후행 쉼표(있는 경우)를 제거한 다음 인쇄를 돕기 위해 쉼표를 세미콜론으로 전환합니다. 그런 다음 :l과 사이에 검색 및 바꾸기 루프를 실행하여 tl현재 입력 줄의 각 방문자 앞에 그룹 이름을 추가합니다.

관련 정보