いくつかの部品でシミュレーションを実行するシミュレーションモデルがあり、ここでサイクル数が増加するにつれて各部品の出力が生成されます。出力ファイルは次のとおりです。
a.000.nc b.000.nc c.000.nc
a.001.nc b.001.nc c.001.nc
a.002.nc b.002.nc c.002.nc
これらのファイルをリンクするには、nco、特にレコードコネクタを使用しますncrcat
。私は次のように各ファイル名(a
pass)に対してc
手動でこれを行いました。
ncrcat a.00{0..2}.nc a.nc
すべてのファイルでncrcatコマンドを実行し、ますます多くのループ(soとto a.000.nc
;a.001.nc
私は出力にどのループ番号があるかを抽出するためにetcを使用しようとしていますが、ファイル名を抽出する方法がわかりません。a.002.nc
a.nc
b.000.nc
b.001.nc
b.002.nc
b.nc
egrep
ls
ありがとうございます!
答え1
次のファイルのリストが提供されます(例のファイルとの000
までのすべての数字を含む)。100
a
$ ls
a.000.nc a.007.nc a.014.nc a.021.nc a.028.nc a.035.nc a.042.nc a.049.nc a.056.nc a.063.nc a.070.nc a.077.nc a.084.nc a.091.nc a.098.nc c.001.nc
a.001.nc a.008.nc a.015.nc a.022.nc a.029.nc a.036.nc a.043.nc a.050.nc a.057.nc a.064.nc a.071.nc a.078.nc a.085.nc a.092.nc a.099.nc c.002.nc
a.002.nc a.009.nc a.016.nc a.023.nc a.030.nc a.037.nc a.044.nc a.051.nc a.058.nc a.065.nc a.072.nc a.079.nc a.086.nc a.093.nc a.100.nc
a.003.nc a.010.nc a.017.nc a.024.nc a.031.nc a.038.nc a.045.nc a.052.nc a.059.nc a.066.nc a.073.nc a.080.nc a.087.nc a.094.nc b.000.nc
a.004.nc a.011.nc a.018.nc a.025.nc a.032.nc a.039.nc a.046.nc a.053.nc a.060.nc a.067.nc a.074.nc a.081.nc a.088.nc a.095.nc b.001.nc
a.005.nc a.012.nc a.019.nc a.026.nc a.033.nc a.040.nc a.047.nc a.054.nc a.061.nc a.068.nc a.075.nc a.082.nc a.089.nc a.096.nc b.002.nc
a.006.nc a.013.nc a.020.nc a.027.nc a.034.nc a.041.nc a.048.nc a.055.nc a.062.nc a.069.nc a.076.nc a.083.nc a.090.nc a.097.nc c.000.nc
あなたはできます:
for f in *.nc; do echo ${f//\.*}; done | sort | uniq |
while read prefix; do echo ncrcat "$prefix".*nc "$prefix".nc; done
これにより、次のような出力が生成されます。
ncrcat a.000.nc a.001.nc a.002.nc a.003.nc a.004.nc a.005.nc a.006.nc a.007.nc a.008.nc a.009.nc a.010.nc a.011.nc a.012.nc a.013.nc a.014.nc a.015.nc a.016.nc a.017.nc a.018.nc a.019.nc a.020.nc a.021.nc a.022.nc a.023.nc a.024.nc a.025.nc a.026.nc a.027.nc a.028.nc a.029.nc a.030.nc a.031.nc a.032.nc a.033.nc a.034.nc a.035.nc a.036.nc a.037.nc a.038.nc a.039.nc a.040.nc a.041.nc a.042.nc a.043.nc a.044.nc a.045.nc a.046.nc a.047.nc a.048.nc a.049.nc a.050.nc a.051.nc a.052.nc a.053.nc a.054.nc a.055.nc a.056.nc a.057.nc a.058.nc a.059.nc a.060.nc a.061.nc a.062.nc a.063.nc a.064.nc a.065.nc a.066.nc a.067.nc a.068.nc a.069.nc a.070.nc a.071.nc a.072.nc a.073.nc a.074.nc a.075.nc a.076.nc a.077.nc a.078.nc a.079.nc a.080.nc a.081.nc a.082.nc a.083.nc a.084.nc a.085.nc a.086.nc a.087.nc a.088.nc a.089.nc a.090.nc a.091.nc a.092.nc a.093.nc a.094.nc a.095.nc a.096.nc a.097.nc a.098.nc a.099.nc a.100.nc a.nc
ncrcat b.000.nc b.001.nc b.002.nc b.nc
ncrcat c.000.nc c.001.nc c.002.nc c.nc
これが正しいと仮定し、echo
コマンドを削除して再実行して実際にファイルをリンクします。
説明する
for f in *.nc; do ...; done
:で終わるすべての項目を繰り返します.nc
。echo ${f//\.*};
:最初の項目以降のすべての項目を削除します.
。これはプレフィックスとのみa
印刷b
しますc
。sort | uniq
: 各プレフィックスの 1 つだけが予約されます。while read prefix; do ...; done
:各プレフィックスを繰り返します。ncrcat "$prefix".*nc "$prefix".nc
:nrcat
このプレフィックスで始まり終わるすべてのファイル名に対して出力ファイル.nc
として実行されます。$prefix.nc