回答編集履歴

5

データが数値であると、決め打ちしていたのでmatchの正規表現変更

2020/01/22 01:49

投稿

退会済みユーザー
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
  for (i = 3; i <= NF; i++) {
20
20
 
21
- if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
21
+ if (pos = match($i, /[^[]]+/)) {
22
22
 
23
23
  if (ssv[i] == "") ssv[i] = substr($i, pos, RLENGTH);
24
24
 

4

iの初期値とコメントの修正(出力不変)

2020/01/22 01:49

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  {
18
18
 
19
- for (i = 1; i <= NF; i++) {
19
+ for (i = 3; i <= NF; i++) {
20
20
 
21
21
  if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
22
22
 
@@ -44,11 +44,11 @@
44
44
 
45
45
 
46
46
 
47
- # データセットが3の倍数でない場合
47
+ # 最後のデータセットが3の倍数でない場合 残りを吐き出す
48
48
 
49
49
  END {
50
50
 
51
- PROCINFO["sorted_in"] = "@ind_num_asc";
51
+ PROCINFO["sorted_in"] = "@ind_num_asc";
52
52
 
53
53
  for (i in ssv) print ssv[i];
54
54
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  ```
58
58
 
59
- iについて
59
+ 配列添字iについて
60
60
 
61
61
  初期値3からインクリメントされていくので、
62
62
 

3

コメント付加、PROCINFOについて

2020/01/21 23:27

投稿

退会済みユーザー
test CHANGED
@@ -11,6 +11,8 @@
11
11
  }
12
12
 
13
13
 
14
+
15
+ # sed&awkプログラミング13章"transpose-行列の転置"参照のこと
14
16
 
15
17
  {
16
18
 
@@ -42,13 +44,23 @@
42
44
 
43
45
 
44
46
 
47
+ # データセットが3の倍数でない場合
48
+
45
49
  END {
50
+
51
+ PROCINFO["sorted_in"] = "@ind_num_asc";
46
52
 
47
53
  for (i in ssv) print ssv[i];
48
54
 
49
55
  }
50
56
 
51
57
  ```
58
+
59
+ iについて
60
+
61
+ 初期値3からインクリメントされていくので、
62
+
63
+ PROCINFOによるソートは必要ないかもしれません。
52
64
 
53
65
 
54
66
 

2

やっぱりちゃんと書いてみました。

2020/01/21 17:10

投稿

退会済みユーザー
test CHANGED
@@ -18,9 +18,9 @@
18
18
 
19
19
  if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
20
20
 
21
- if (csv[i] == "") csv[i] = substr($i, pos, RLENGTH);
21
+ if (ssv[i] == "") ssv[i] = substr($i, pos, RLENGTH);
22
22
 
23
- else csv[i] = csv[i] " " substr($i, pos, RLENGTH);
23
+ else ssv[i] = ssv[i] " " substr($i, pos, RLENGTH);
24
24
 
25
25
  }
26
26
 
@@ -30,19 +30,25 @@
30
30
 
31
31
  PROCINFO["sorted_in"] = "@ind_num_asc";
32
32
 
33
- for (i in csv) print csv[i];
33
+ for (i in ssv) print ssv[i];
34
34
 
35
35
  print "";
36
36
 
37
- delete csv;
37
+ delete ssv;
38
38
 
39
39
  }
40
40
 
41
41
  }
42
42
 
43
+
44
+
45
+ END {
46
+
47
+ for (i in ssv) print ssv[i];
48
+
49
+ }
50
+
43
51
  ```
44
-
45
- 最後のデータが3の倍数でないときはENDで吐き出してください
46
52
 
47
53
 
48
54
 

1

データセットが3の倍数ではない可能性があった。

2020/01/21 15:47

投稿

退会済みユーザー
test CHANGED
@@ -42,6 +42,10 @@
42
42
 
43
43
  ```
44
44
 
45
+ 最後のデータが3の倍数でないときはENDで吐き出してください
46
+
47
+
48
+
45
49
  result
46
50
 
47
51