質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

3回答

1500閲覧

awkを使った2つのファイル要素の計算

Wombat

総合スコア1

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2021/09/02 07:27

awkで2つのファイルの要素を算術計算して,出力することはできますか?
具体的には
1 2 3
4 5 6
というファイルと(実際はもっと行列とも数が多い)
3 4 5
6 7 8
というファイルの各要素を足して(あるいは四則演算して)
4 6 8
10 12 14
というようなファイルに出力したいのです.
よろしくお願いします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2021/09/02 20:38

とくにこだわりがないのなら Python とか使った方がラクな気がします。
KojiDoi

2021/09/03 04:23

画像ファイルの演算なら、imagemagickを使うのが手っ取り早い気がします。
guest

回答3

0

わざわざご回答をいただいた皆様.どうもありがとうございました.awkは単一ファイル内だと処理が簡単なのですが,複数ファイルの処理はやや手間取ることがわかりました.それでもawkの使い方にまた精進できました.くだんのpgm画像ファイルは書き出し部分のコードを変更して,2つのファイルの加算を書き出しの部分で行えることがわかりました.お手数をおかけしました.また何かありましたらどうぞよろしくお願いします.

投稿2021/09/03 00:13

Wombat

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

スクリプトを作ってみました。
ファイルの行数,列数が違っている場合は少ない方に0が入っていると見なして加算するような動作になります。
ファイルが3個以上ある場合でも、すべてのファイルについて行と列をそのまま足していくような動作になります。

awk

1{ 2 # v[行,列] にデータを加算していく 3 for(x=1;x<=NF;++x){ 4 v[FNR,x]+=$x 5 } 6 # 行ごとの最大列を調べておく 7 if(fields[FNR]<NF){ 8 fields[FNR]=NF 9 } 10 # 最大行を調べておく 11 if(lines<FNR){ 12 lines=FNR 13 } 14} 15END{ 16 # 最後に結果を出力する 17 for(y=1;y<=lines;++y){ 18 for(x=1;x<=fields[y];++x){ 19 printf v[y,x] " " 20 } 21 print "" 22 } 23}

実行結果です。

terminal

1$ cat plus.awk 2{ 3 # v[行,列] にデータを加算していく 4 for(x=1;x<=NF;++x){ 5 v[FNR,x]+=$x 6 } 7 # 行ごとの最大列を調べておく 8 if(fields[FNR]<NF){ 9 fields[FNR]=NF 10 } 11 # 最大行を調べておく 12 if(lines<FNR){ 13 lines=FNR 14 } 15} 16END{ 17 # 最後に結果を出力する 18 for(y=1;y<=lines;++y){ 19 for(x=1;x<=fields[y];++x){ 20 printf v[y,x] " " 21 } 22 print "" 23 } 24} 25 26$ cat 1.txt 271 2 3 284 5 6 29 30$ cat 2.txt 313 4 5 326 7 8 33 34$ cat 3.txt 3510 20 30 40 3650 60 70 3780 90 38 39$ awk -f plus.awk 1.txt 2.txt 404 6 8 4110 12 14 42 43$ awk -f plus.awk 1.txt 2.txt 3.txt 4414 26 38 40 4560 72 84 4680 90

投稿2021/09/02 09:08

hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wombat

2021/09/03 00:09

回答ありがとうございました.上記で目的は達成できそうですが,元のpgmの書き出しコードを変更して,2つのファイルの加算と同じ効果が出るようにしました.お手数をおかけして申しわけありませんでした.またどうぞよろしくお願いします.
guest

0

両ファイルの列数が完全に同じであったとして、

awk

1# test.awk 2NR==1{ 3 n=NF/2 4} 5{ 6 for(i=1; i<n; i++){ 7 j=i+n 8 printf "%d%s", $i+$j, OFS 9 } 10 print $i+$NF 11}
$ paste a.txt b.txt |awk -f test.awk

投稿2021/09/02 08:22

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Wombat

2021/09/02 12:47 編集

ご回答ありがとうございます.実はターゲットファイルはpgm画像ファイルなので,現在その扱いを検討しています.ご回答いただきありがとうございました.pgmファイルなので行と列は同じ数のファイルとなります.
Wombat

2021/09/03 05:36

Imagemagickを使う件,ご示唆ありがとうございます.なるほどぞの手もありましたね.気付きませんでした.pgmファイルはヘッダが付いているので,Processingでの扱いも単純に行列(Table)として扱えず,色々と試行しております.ご回答を感謝します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問