2つの入力ファイルデータの処理

2つの入力ファイルデータの処理

2つの巨大な入力ファイルがあります。

file1タブで区切られた3つのフィールドが含まれています。

  • field1:UID
  • field2: ユーザー名
  • 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

file14番目の列(タブ区切り)の各ユーザー行に、特定のユーザーが属するグループ名をカンマで区切って追加する必要があります。

ベストアンサー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

おすすめ記事