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

回答編集履歴

5

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

2020/01/22 01:49

投稿

退会済みユーザー
answer CHANGED
@@ -8,7 +8,7 @@
8
8
  # sed&awkプログラミング13章"transpose-行列の転置"参照のこと
9
9
  {
10
10
  for (i = 3; i <= NF; i++) {
11
- if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
11
+ if (pos = match($i, /[^[]]+/)) {
12
12
  if (ssv[i] == "") ssv[i] = substr($i, pos, RLENGTH);
13
13
  else ssv[i] = ssv[i] " " substr($i, pos, RLENGTH);
14
14
  }

4

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

2020/01/22 01:49

投稿

退会済みユーザー
answer CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  # sed&awkプログラミング13章"transpose-行列の転置"参照のこと
9
9
  {
10
- for (i = 1; i <= NF; i++) {
10
+ for (i = 3; i <= NF; i++) {
11
11
  if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
12
12
  if (ssv[i] == "") ssv[i] = substr($i, pos, RLENGTH);
13
13
  else ssv[i] = ssv[i] " " substr($i, pos, RLENGTH);
@@ -21,13 +21,13 @@
21
21
  }
22
22
  }
23
23
 
24
- # データセットが3の倍数でない場合
24
+ # 最後のデータセットが3の倍数でない場合 残りを吐き出す
25
25
  END {
26
- PROCINFO["sorted_in"] = "@ind_num_asc";
26
+ PROCINFO["sorted_in"] = "@ind_num_asc";
27
27
  for (i in ssv) print ssv[i];
28
28
  }
29
29
  ```
30
- iについて
30
+ 配列添字iについて
31
31
  初期値3からインクリメントされていくので、
32
32
  PROCINFOによるソートは必要ないかもしれません。
33
33
 

3

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

2020/01/21 23:27

投稿

退会済みユーザー
answer CHANGED
@@ -5,6 +5,7 @@
5
5
  RS = "]]";
6
6
  }
7
7
 
8
+ # sed&awkプログラミング13章"transpose-行列の転置"参照のこと
8
9
  {
9
10
  for (i = 1; i <= NF; i++) {
10
11
  if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
@@ -20,10 +21,15 @@
20
21
  }
21
22
  }
22
23
 
24
+ # データセットが3の倍数でない場合
23
25
  END {
26
+ PROCINFO["sorted_in"] = "@ind_num_asc";
24
27
  for (i in ssv) print ssv[i];
25
28
  }
26
29
  ```
30
+ iについて
31
+ 初期値3からインクリメントされていくので、
32
+ PROCINFOによるソートは必要ないかもしれません。
27
33
 
28
34
  result
29
35
 

2

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

2020/01/21 17:10

投稿

退会済みユーザー
answer CHANGED
@@ -8,19 +8,22 @@
8
8
  {
9
9
  for (i = 1; i <= NF; i++) {
10
10
  if (pos = match($i, /-?([1-9][0-9]*|0|([1-9][0-9]*.|0.)[0-9]+)/)) {
11
- if (csv[i] == "") csv[i] = substr($i, pos, RLENGTH);
11
+ if (ssv[i] == "") ssv[i] = substr($i, pos, RLENGTH);
12
- else csv[i] = csv[i] " " substr($i, pos, RLENGTH);
12
+ else ssv[i] = ssv[i] " " substr($i, pos, RLENGTH);
13
13
  }
14
14
  }
15
15
  if (NR % 3 == 0) {
16
16
  PROCINFO["sorted_in"] = "@ind_num_asc";
17
- for (i in csv) print csv[i];
17
+ for (i in ssv) print ssv[i];
18
18
  print "";
19
- delete csv;
19
+ delete ssv;
20
20
  }
21
21
  }
22
+
23
+ END {
24
+ for (i in ssv) print ssv[i];
25
+ }
22
26
  ```
23
- 最後のデータが3の倍数でないときはENDで吐き出してください
24
27
 
25
28
  result
26
29
 

1

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

2020/01/21 15:47

投稿

退会済みユーザー
answer CHANGED
@@ -20,6 +20,8 @@
20
20
  }
21
21
  }
22
22
  ```
23
+ 最後のデータが3の倍数でないときはENDで吐き出してください
24
+
23
25
  result
24
26
 
25
27
  111 444 777