質問編集履歴

4

内容の追加

2020/11/03 07:54

投稿

rookieman
rookieman

スコア2

test CHANGED
File without changes
test CHANGED
@@ -134,6 +134,78 @@
134
134
 
135
135
 
136
136
 
137
+
138
+
139
+ 以下は修正前と修正後のhogeファイルの内容となります。
140
+
141
+ IDリスト記載の行のみ抜粋(修復するIDを増やしています)
142
+
143
+
144
+
145
+ 修正前hogeファイル(重複がある場合)
146
+
147
+
148
+
149
+ ```
150
+
151
+ aaaaa = t11111,t22222,t33333,t44444,t55555
152
+
153
+ bbbbb = t11111,t22222,t33333,t44444,t55555
154
+
155
+ ccccc = t11111,t22222,t33333,t44444,t11111,t22222,t99999
156
+
157
+ ```
158
+
159
+
160
+
161
+
162
+
163
+ 修正後hogeファイル
164
+
165
+
166
+
167
+ ```
168
+
169
+ aaaaa = t11111,t22222,t33333,t44444,t55555
170
+
171
+ bbbbb = t11111,t22222,t33333,t44444,t55555
172
+
173
+ ccccc = t11111,t22222,t33333,t44444,t99999
174
+
175
+ ```
176
+
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+
192
+
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+
208
+
137
209
  経験が浅く見当違いな質問でしたら申し訳ございません。
138
210
 
139
211
  説明不足かとは思いますが、、、

3

内容の修正

2020/11/03 07:54

投稿

rookieman
rookieman

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,110 @@
1
+ fooファイルで行いたい処理フロー
2
+
3
+
4
+
5
+
6
+
7
+ 手順1.対処のフォルダにhogeファイルがあるかfooで確認する(以降はあった場合の手順となる)
8
+
9
+   .IDの初回登録の場合 受け取ったhogeファイルのの内容は以下になります。
10
+
11
+ ```
12
+
13
+ 1行目から20行目まではID以外の内容が記載されている。
14
+
15
+ IDがある行は21-23行に存在
16
+
17
+
18
+
19
+ # aaaaa = txxxxx,txxxxx
20
+
21
+ # bbbbb = txxxxx,txxxxx
22
+
23
+ # ccccc = txxxxx,txxxxx
24
+
25
+
26
+
27
+ 24行以下にはID以外の内容が記載されている
28
+
29
+ ```
30
+
31
+
32
+
33
+ 手順2.fooで初回のID登録か判断する(先頭に#があるとき初回登録扱い)
34
+
35
+  ・先頭に#があればtrue
36
+
37
+
38
+
39
+ 手順3.追加するIDがあるか確認する(手順2がfalseのときの処理)
40
+
41
+  ・hogeファイルのグループとIDの行を取得
42
+
43
+    * IDを追加する場合 追加するIDがあるかの確認
44
+
45
+    ・IDがリストにあればtrue
46
+
47
+
48
+
49
+ * IDを削除する場合 削除するIDがあるかの確認
50
+
51
+    ・IDがリストになければtrue
52
+
53
+
54
+
55
+ 手順4.手順2.3でファイルの内容を確認して内容を変更していくか判断する
56
+
57
+  ・手順2がtrueもしくは 手順3がfalseの場合以降の手順を進める
58
+
59
+  ・内容の変更がない場合はwarningを表示させて終了
60
+
61
+
62
+
63
+ 手順5.hogeファイルの内容を変更する前に hoge.yyyyMMddHHmmSS.sssの形で同じ階層にバックアップを作成
64
+
65
+
66
+
67
+ 手順6.手順2でtrueだった場合初回登録とみなす
68
+
69
+  ・IDを追加する前に先頭にある#と半角スペース =後ろにある txxxxx,txxxxxを削除し aaaaa=の状態にする
70
+
71
+
72
+
73
+ 手順7.ここでIDリストの追加と重複削除処理を行う
74
+
75
+ * 手順3で受け取ったIDリストを配列に変更(カンマを半角スペースに変える)
76
+
77
+ * 変更した配列で削除追加処理を行う
78
+
79
+ * 追加削除した配列をカンマ区切りの文字列に戻す。
80
+
81
+ * 追加削除し終えた行をhogeファイルの元の行に置き換える
82
+
83
+
84
+
85
+
86
+
87
+ 以上のフローを実行できればと思っています。
88
+
89
+
90
+
91
+ ーーーーーーーーーーーーーーーーーーーー
92
+
93
+
94
+
95
+
96
+
97
+ ※初回登録かそうではないかのtrue falseは確認できる状態です※
98
+
99
+
100
+
101
+
102
+
1
103
  hogeが更新されるごとにグループが持つのIDが追加される
2
104
 
3
- 稀に重複したIDが追加されるため重複してるかしていないかの確認処理をfooで行いたい
105
+ 稀に重複したIDが追加されるため重複してるかしていないかの確認処理をfooで行いたい
106
+
107
+
4
108
 
5
109
 
6
110
 
@@ -12,7 +116,7 @@
12
116
 
13
117
 
14
118
 
15
- ・テキストファイルhogeの内容は以下になります。
119
+ ・テキストファイルhogeの内容は以下(初回登録ではない場合)になります。
16
120
 
17
121
  (例)グループ名 = ID,ID,ID,ID
18
122
 
@@ -20,87 +124,13 @@
20
124
 
21
125
  ```
22
126
 
23
- aaaaa = y11111,y22222,y33333,y44444,y55555
127
+ aaaaa = t11111,t22222,t33333,t44444,t55555
24
128
 
25
- bbbbb = u11111,u22222,u33333,u44444,u55555
129
+ bbbbb = t11111,t22222,t33333,t44444,t55555
26
130
 
27
131
  ccccc = t11111,t22222,t33333,t44444,t11111
28
132
 
29
133
  ```
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
- * 手順1 fooにhogeのグループがある行をcatする実行コマンドを変数に代入して保管する。
40
-
41
- ```
42
-
43
- #!bin/bash/foo
44
-
45
-
46
-
47
- #hogeファイルの対象グループとIDリストを含む行を取得
48
-
49
- c=$(cat hoge | head -3 | tail -1)
50
-
51
-
52
-
53
-
54
-
55
- #変数cは ccccc = t11111,t22222,t33333,t44444,t11111
56
-
57
- ```
58
-
59
-
60
-
61
- * 手順2 変数cの =の後ろにt11111の重複があります
62
-
63
-
64
-
65
- ```
66
-
67
- #!bin/bash/foo
68
-
69
-
70
-
71
- #hogeファイルの対象グループとIDリストを含む行を取得
72
-
73
- c=$(cat hoge | head -3 | tail -1)
74
-
75
-
76
-
77
- if文を用意て変数cに重複文字列があるかないかの結果をだしたいです。
78
-
79
-
80
-
81
- ここでつまづいています。
82
-
83
-
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
- #次に重複があるかないかの確認
94
-
95
- #あればhogeをバックアップして重複の削除
96
-
97
- #なければ,そのままwarningを表示して終了
98
-
99
-
100
-
101
- ```
102
-
103
-
104
134
 
105
135
 
106
136
 

2

説明内容の改善

2020/11/03 06:38

投稿

rookieman
rookieman

スコア2

test CHANGED
File without changes
test CHANGED
@@ -74,6 +74,22 @@
74
74
 
75
75
 
76
76
 
77
+ if文を用意て変数cに重複文字列があるかないかの結果をだしたいです。
78
+
79
+
80
+
81
+ ここでつまづいています。
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
77
93
  #次に重複があるかないかの確認
78
94
 
79
95
  #あればhogeをバックアップして重複の削除

1

内容がわからないという意見をいただいたので修正

2020/11/02 05:34

投稿

rookieman
rookieman

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,14 @@
1
+ hogeが更新されるごとにグループが持つのIDが追加される
2
+
1
- シェルスクリプトを使用して指定の行に重複して文字列があるないかの確認処理の作成がしたいです。
3
+ に重複したIDが追加されるため重複してるかしていないかの確認処理をfooで行いたい
2
4
 
3
5
 
4
6
 
5
7
  ・使用するファイルは2つあります。
6
8
 
7
- ①テキストファイルhoge(指定した行をもつファイル
9
+ ①テキストファイルhoge(グループとIDが追加されて
8
10
 
9
- ②テキストファイルfoo(指定した1行を抽出し、その行に重複している文字列があるかないかを確認するファイル
11
+ ②テキストファイルfoo(重複があるかないかを確認、あった場合hogeのバックアップを作成し、その後重複の処理を行う
10
-
11
-
12
-
13
-
14
12
 
15
13
 
16
14
 
@@ -20,9 +18,7 @@
20
18
 
21
19
 
22
20
 
23
- --------------------------------
21
+ ```
24
-
25
-
26
22
 
27
23
  aaaaa = y11111,y22222,y33333,y44444,y55555
28
24
 
@@ -30,21 +26,63 @@
30
26
 
31
27
  ccccc = t11111,t22222,t33333,t44444,t11111
32
28
 
33
-
34
-
35
- ---------------------------------
36
-
37
- 以上の内容ですと
29
+ ```
38
-
39
- hogeファイルの3行目にあるグループ名cccccには「t11111」のIDが重複しているのが確認できます。
40
30
 
41
31
 
42
32
 
43
- この行をテキストファイルfooに抽出し、[ccccc = ]の後ろから
44
33
 
45
- 重複する文字列があるかないかの確認処理を作成したいです。
46
34
 
35
+
36
+
37
+
38
+
39
+ * 手順1 fooにhogeのグループがある行をcatする実行コマンドを変数に代入して保管する。
40
+
41
+ ```
42
+
43
+ #!bin/bash/foo
44
+
45
+
46
+
47
+ #hogeファイルの対象グループとIDリストを含む行を取得
48
+
49
+ c=$(cat hoge | head -3 | tail -1)
50
+
51
+
52
+
53
+
54
+
55
+ #変数cは ccccc = t11111,t22222,t33333,t44444,t11111
56
+
57
+ ```
58
+
59
+
60
+
47
- 重複チェックには正規表現を用意てマッチできればと思います
61
+ * 手順2 変数cの =の後ろにt11111の重複があります
62
+
63
+
64
+
65
+ ```
66
+
67
+ #!bin/bash/foo
68
+
69
+
70
+
71
+ #hogeファイルの対象グループとIDリストを含む行を取得
72
+
73
+ c=$(cat hoge | head -3 | tail -1)
74
+
75
+
76
+
77
+ #次に重複があるかないかの確認
78
+
79
+ #あればhogeをバックアップして重複の削除
80
+
81
+ #なければ,そのままwarningを表示して終了
82
+
83
+
84
+
85
+ ```
48
86
 
49
87
 
50
88