teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/11/03 20:16

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -3,4 +3,49 @@
3
3
  ```
4
4
  cp hoge hoge.bak
5
5
  awk -F " *[=,] *" '{delete n; printf "%s=%s", $1,$2; n[$2]=1; for(i=3;i<=NF;i++){n[$i]++; if(n[$i]<=1) printf ",%s",$i;} printf "\n"}' hoge.bak > hoge
6
+ ```
7
+
8
+ # 追記
9
+
10
+ だいぶん話が違っていたことがわかってきたので、改めて。
11
+
12
+ hoge.txt
13
+
14
+ ```
15
+ # aaaaa = t11111,t22222,t33333,t44444,t55555
16
+ aaaaa = t11111,t22222,t33333,t44444,t55555
17
+ bbbbb = t11111,t22222,t33333,t44444,t55555
18
+ ccccc = t11111,t22222,t33333,t44444,t11111,t22222,t99999
19
+ ```
20
+
21
+ test.awk
22
+ ```
23
+ BEGIN{
24
+ FS = " *[=,] *";
25
+ }
26
+ /^#/{
27
+ sub(/^# */, "", $1);
28
+ printf "%s=\n", $1;
29
+ next;
30
+ }
31
+ {
32
+ delete n;
33
+ printf "%s=%s", $1, $2;
34
+ n[$2]=1;
35
+ for(i=3; i<=NF; i++){
36
+ n[$i]++;
37
+ if(n[$i]<=1) printf ",%s", $i;
38
+ }
39
+ printf "\n";
40
+ }
41
+ ```
42
+
43
+ 実行
44
+
45
+ ```
46
+ $ awk -f test.awk hoge.txt
47
+ aaaaa=
48
+ aaaaa=t11111,t22222,t33333,t44444,t55555
49
+ bbbbb=t11111,t22222,t33333,t44444,t55555
50
+ ccccc=t11111,t22222,t33333,t44444,t99999
6
51
  ```