2つの巨大な入力ファイルがあります。
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
4番目の列(タブ区切り)の各ユーザー行に、特定のユーザーが属するグループ名をカンマで区切って追加する必要があります。
ベストアンサー1
次のシェルスクリプト(私はkshを使用しています)はあなたの要求に応じて3番目のファイルを生成します。
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