두 개의 거대한 입력 파일이 있습니다.
file1
탭으로 구분된 3개의 필드가 포함되어 있습니다.
field1
:UIDfield2
: 사용자 이름field3
: 실제 이름
예 file1
:
644 u11496 Real name1
640 u1309 Real name2
641 u3007 Real name3
642 u3030 Real name4
643 u3112 Real name5
54 u0365 Real name6
55 u0613 Real name7
56 u1065 Real name8
57 u1550 Real name9
file2
여러 행이 있으며 각 행에는 탭으로 구분된 3개의 필드가 있습니다.
field1
: 이 경우 무시할 수 있습니다.field2
:팀 이름field3
: 쉼표로 구분된 사용자 UID가 포함된 열
예 file2
:
2 group1 14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340
6 group2 14
15 group3 14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734
file1
네 번째 열(탭으로 구분)의 각 사용자 행에 특정 사용자가 속한 그룹 이름을 쉼표로 구분하여 추가 해야 합니다 .
답변1
다음 쉘 스크립트(저는 ksh를 사용하고 있습니다)는 귀하의 요청에 따라 세 번째 파일을 생성합니다.
while read U REST
do
S=" " # initialized with a tabulation
G=""
grep -E '[ ,]'"$U"'(,|$)' file2.txt | while read X GROUP USRLIST
do
G="$G$S$GROUP"
S=","
done
echo "$U $REST$G" # tab between $U and $REST
done < file1.txt > file3.txt
file1.txt는
644 u11496 Real name1
640 u1309 Real name2
641 u3007 Real name3
642 u3030 Real name4
643 u3112 Real name5
54 u0365 Real name6
55 u0613 Real name7
56 u1065 Real name8
57 u1550 Real name9
14 u14 Jules Ceasar
file2.txt는
2 group1 14,730,748,733,746,761,757,766,735,760,747,738,752,737,758,755,734,754,764,334,335,336,337,41,338,339,39,340
6 group2 14
14 group6 667,683,641
15 group3 14,667,683,713,730,707,748,733,746,761,680,694,757,766,717,735,760,747,704,738,752,737,715,688,681,700,692,758,755,714,734
file3.txt를 다음과 같이 얻게 됩니다.
644 u11496 Real name1
640 u1309 Real name2
641 u3007 Real name3 group6
642 u3030 Real name4
643 u3112 Real name5
54 u0365 Real name6
55 u0613 Real name7
56 u1065 Real name8
57 u1550 Real name9
14 u14 Jules Ceasar group1,group2,group3