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

回答編集履歴

2

修正

2016/09/22 05:01

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -27,4 +27,10 @@
27
27
  ```
28
28
 
29
29
  読み方のポイントは、bashが必ず先に処理を行った後にawkが実行される事に有ります。bashにとってはawkはただのコマンドです。whileにてfile2の行数分awk実行されます。
30
- さらに速度を求めるのであればfile2の読込みもawkで全て行うと早なると思います(修正大変ですが)。bashのloopは速度が出ないので。
30
+ さらに速度を求めるのであればfile2の読込みもawkで全て行うと早なると思います(修正大変ですが)。bashのloopは速度が出ないので。
31
+
32
+
33
+ 言った手前書きました旨く行くとよいのですが・・・
34
+ ```awk
35
+ awk '{cc=$1;ff=$3;while(getline <ff >0){print cc,$0;}}' file2 >>file3
36
+ ```

1

追加情報

2016/09/22 05:00

投稿

A.Ichi
A.Ichi

スコア4070

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