1

こんにちは、スクリプト作成と解決策の検索は初めてです。名前の異なる 2 つのテキスト ファイルがあり、それらを結合して新しい 3 つ目のテキスト ファイルを作成したいと考えています。各テキスト ファイルの形式はまったく同じで、そのようになります。各テキスト ファイルには、# 記号で始まり、その後にテキストが続くいくつかの (同数の) 行があります。# 記号で始まる行の後。数字で始まる行があります。これらの行には、スペースで区切られた 3 つの列に数字が含まれます。最初の 2 列の数値は両方のファイルで同じですが、3 列目の数値は異なります。数百行の後、再び # 記号で始まる行があり、その後に前のように 3 列の数字で始まる行が続き、これが何度も繰り返される可能性があります。今ここに私がやりたいことがあります。最初のテキスト ファイルから正確にコピーされた # 記号で始まる行を持つ新しいテキスト ファイルを作成したいと考えています。数値の最初の 2 列をそのままコピーしたい。これらの 2 つの列は、両方のファイルで同じになるため、最初のテキスト ファイルまたは 2 番目のテキスト ファイルからコピーできます。新しいテキスト ファイルの 3 列目に、最初の 2 つのファイルの 3 列目に数値を追加します。

新しいテキスト ファイルの 3 列目の番号 = (最初のファイルの 3 列目の番号 + 2 番目のファイルの 3 列目の番号)

いくつかの行の後、# 記号の付いた行が再び表示され、その後に 3 列の数字が続く行が表示される場合があります。これは繰り返すことができます。

1 つのテキスト ファイルのみのサンプル フォーマットを以下に示します。2 番目のテキスト ファイルはまったく同じ形式になります。

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 4.4226
 0.0   5.0 4.4246
 0.0  10.0 4.4456
 0.0  15.0 4.4876
 0.0  20.0 4.4453
 0.0  25.0 5.6585
 .
 .
 .
 .
# 
# 
#
# 
#
 0.0   0.0 0.410135
 0.0   5.0 0.745745
 0.0  10.0 0.574555
 0.0  15.0 0.415675
 0.0  20.0 0.575454
 0.0  25.0 0.410135
 0.0  30.0 0.678768
 0.0  35.0 0.410135
 0.0  40.0 0.976876
 0.0  45.0 0.678678
 0.0  50.0 0.410135
 0.0  55.0 0.678976
 0.0  60.0 0.410135
 0.0  65.0 0.687876
 0.0  70.0 0.768677
 .
 .
 .
 .
 .
 .

この # 記号と 3 列の数字を含む行の形式は繰り返すことができます。3 列に数字がある行にはスペースで区切られた列があり、これらの数字のある行の先頭にも 1 つのスペースがあります。うまく説明できたと思います。簡単に実行できるので、bacthスクリプトを好みます。ただし、perl も機能します。ご助力ありがとうございます。高く評価。

新しいファイル形式は他の 2 つのファイルとまったく同じで、3 列目は 1 番目と 2 番目の txt ファイルの 3 列目の数値の合計です。サンプルの 3 番目のファイル形式を以下に示します。

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 8.4355
 0.0   5.0 6.3553
 0.0  10.0 6.4327
 .
 .
 .
 .
# 
# 
# 
# 
# 
 0.0   0.0 4.832735
 0.0   5.0 7.436343
 0.0  10.0 0.323325
 0.0  15.0 4.876656
 .
 .
 .
 .
 .
 .

改めまして、誠にありがとうございました。これらのファイルがたくさんあるので、頭痛がします。あなたの助けは大歓迎です。

ファイル1はこちら

# 
# 
# 
# 
# 
#
# 
 0.0   0.0 5.30562
 0.0   5.0 5.30562
 0.0  10.0 1.4852
90.0 355.0 1.99511
# 
# 
# 
# 
# 
 0.0   0.0 0.948027
 0.0   5.0 0.948027
90.0 355.0 1.54

ファイル2は

# 
# 
# 
# 
# 
# 
# 
 0.0   0.0 1.4621
 0.0   5.0 1.4621
 0.0  10.0 1.4621
90.0 355.0 3.3359
# 
# 
# 
# 
# 
 0.0   0.0 0.747458
 0.0   5.0 0.747458
90.0 355.0 0.550766

これで、最初と列の間にスペースがあると思われる問題を確認できます

4

1 に答える 1

0

次を使用してみてくださいawk

awk 'NR==FNR {if($3~/[0-9]+\.[0-9]+/){a[i++]=$3}; next} \
     $3~/[0-9]+\.[0-9]+/ {$3=$3+a[j++]} \
     1' file1 file2 > file3

コメントで指定されたサンプル入力のテスト:

$ cat file1
# comment here
90.0 355.0 1.54

$ cat file2
# comment here
90.0 355.0 0.550766

$ awk 'NR==FNR {if($3~/[0-9]+\.[0-9]+/){a[i++]=$3}; next} \
?      $3~/[0-9]+\.[0-9]+/ {$3=$3+a[j++]} \
?      1' file1 file2 > file3

$ cat file3
# comment here
90.0 355.0 2.09077
于 2013-10-19T10:07:01.837 に答える