回答編集履歴

2

修正

2016/09/22 05:01

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -57,3 +57,15 @@
57
57
  読み方のポイントは、bashが必ず先に処理を行った後にawkが実行される事に有ります。bashにとってはawkはただのコマンドです。whileにてfile2の行数分awk実行されます。
58
58
 
59
59
  さらに速度を求めるのであればfile2の読込みもawkで全て行うと早なると思います(修正大変ですが)。bashのloopは速度が出ないので。
60
+
61
+
62
+
63
+
64
+
65
+ 言った手前書きました旨く行くとよいのですが・・・
66
+
67
+ ```awk
68
+
69
+ awk '{cc=$1;ff=$3;while(getline <ff >0){print cc,$0;}}' file2 >>file3
70
+
71
+ ```

1

追加情報

2016/09/22 05:00

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -11,3 +11,49 @@
11
11
  done<file2
12
12
 
13
13
  ```
14
+
15
+
16
+
17
+ ご説明不足にて失礼いたしました。
18
+
19
+ ```bash
20
+
21
+ while read -a arr;do
22
+
23
+     #whileのreadにてfile2を変数arrに読み込みます。1行づつ
24
+
25
+     #その際whileに-aを付ける事でarrに配列として値がセットされます。
26
+
27
+     #file2は空白でセパレートされているのでデフォルトで分離されます。
28
+
29
+     #他の場合,であればIFSで変更できます。
30
+
31
+     #${arr[0]},${arr[1]},${arr[2]}に値file2の値がセットされます。
32
+
33
+
34
+
35
+ awk -v ar=${arr[0]} '{print ar,$0}' ${arr[2]} >>file3
36
+
37
+ #awkの内部の変数arに値を設定する為に-vを使います。${arr[0]}をar変数に渡します。
38
+
39
+ #${arr[2]}はファイル名が展開(awk実行前)されますので awkの入力ファイルとなります。<file2
40
+
41
+ #awkでは$0で入力ファイル行の全体を示しています、その前にarr変数値をつけます。
42
+
43
+ #arr,$0とカンマを入れると空白間に付けて出力します,カンマで無く空白だと結合し出力されます。
44
+
45
+ #print出力は>>でfaile3へ追加します。
46
+
47
+
48
+
49
+ done<file2
50
+
51
+     #whileへの入力ファイルとします。
52
+
53
+ ```
54
+
55
+
56
+
57
+ 読み方のポイントは、bashが必ず先に処理を行った後にawkが実行される事に有ります。bashにとってはawkはただのコマンドです。whileにてfile2の行数分awk実行されます。
58
+
59
+ さらに速度を求めるのであればfile2の読込みもawkで全て行うと早なると思います(修正大変ですが)。bashのloopは速度が出ないので。