ファイル名から値を抽出してテキストファイルに追加します。

ファイル名から値を抽出してテキストファイルに追加します。

テキストファイルにメッシュモデルデータ(異なる深さで区切られています)が格納されています。構造は次のとおりです。

滞在テキストファイル行の各列は次のとおりです。

x_coordinate y_coordinate density

各テキストファイルには約400×400のポイントがあります(特定の深さの平面で)。

ファイル名:

dep###

ここでは、###深さ(Z方向)を表す数字です。数値は整数または小数のいずれかです。たとえば、「dep0」、「dep0.5」、「dep10」、「dep300」というファイルがあります。これは、これらのデータが、深さ0、0.5のxy平面の形で400 * 400グリッドデータであることを意味します。 10と300。

これで、ファイル名(深さとも呼ばれる)の数字を取得し、各行の3番目の列に追加して、すべて一緒にグループ化したいと思います。さらに、深さは最小から最大まで順に並べる必要があります。したがって、出力ファイルは次のようにする必要があります(例:)。

x_coordinate y_coordinate z_coordinate density
0            0            0            2.5
0            1            0            2.5
...          ...          0            2.6
400          400          0            2.9
0            0            0.5          2.8
...          ...          0.5          2.9
0            0            10           3.2
...          ...          10           3.3
...          ...          300          4.7
...          ...          300          4.8

最初は、次のスクリプトを使用していました。

for((i=$depmin;i<=$depmax;i++))
do
 if [ -f "xyp/dep"$i ];then
  awk '{print $1, $2,'$i',$3}' "xyp/dep"$i >> "xyzp/area1"
 fi
done

その後、深さが整数ではなくすべてのファイルを見逃すことがわかりました。変数 $iサイクルごとに1ずつ増加しますfor

sed試してみましたが、引き続きfind -execエラーが発生します。私にとって難しいのは、値を他の機能にリダイレクトまたはパイプするために、それを正しく$使用する方法をよく理解していないことです。この問題を解決するのに役立ちます。''<<<awk

======================

私はこのスクリプトを思い出しました。

depnumbers=$(ls xyp | sed -e 's/dep//g' |sort -n)
filecount=$(ls xyp | wc -l)

for((i=1;i<=$filecount;i++))
 do
  dep=$(awk '{print $'$i'}' <<< $depnumbers)
  awk '{print $1, $2,'$dep',$3}' "xyp/dep"$dep >> "xyzp/area1"
 done

それは非常にうまく動作します。この種の作業のためにこのスクリプトを単純化または改善する方法はありますか?実際、私は初めてbashに触れましたが、まだ何かが間違っていると思います...確信はありません

ベストアンサー1

ファイルに数字を追加するためのものです。

awk 'NR>1{print $1,$2,substr(FILENAME,7),$4 }' xyp/dep* > "xyzp/area1"

数値でソートするために使用されます。

ls -1v xyp/dep* | xargs awk 'NR>1{print $1,$2,substr(FILENAME,7),$4 }' > "xyzp/area1"

負の整列に使用されます。

 ls xyp/dep* | sort -t 'p' -k 3 -n | xargs awk 'NR>1{print $1,$2,substr(FILENAME,7),$4 }' > "xyzp/area1"

これにより、文字がp区切り文字として扱われ、関数はsort -n次の数字にのみ影響します。

おすすめ記事