ste*_*eve 4 command-line bash files
我有几个文件(表)命名为:研究所_
模型_
场景_
河.txt
(机构、模型、场景和河流是变量。)我想创建一个for
循环来识别具有相同机构名称和相同场景名称的每个文件,以便附加每个不同的结果模型在同一个输出文件中,使用以下命令:
paste filename1.txt filename2.txt > output_file.txt
Run Code Online (Sandbox Code Playgroud)
我知道如何for
在不同的文件夹上创建循环,但不知道如何在文件名上创建循环。有人有想法吗?
作为一个最小的例子,文件名可能如下:
wbm_gfdl_rcp8p5_mississippi.txt
wbm_hadgem_rcp8p5_mississippi.txt
matsiro_gfdl_rcp8p5_mississippi.txt
matsiro_ipsl_rcp4p5_mississippi.txt
matsiro_hadgem_rcp4p5_mississippi.txt
matsiro_miroc_rcp8p5_mississippi.txt
Run Code Online (Sandbox Code Playgroud)
然后,我想将以下文件附加在一起:
wbm_gfdl_rcp8p5_mississippi.txt with
wbm_hadgem_rcp8p5_mississippi.txt
matsiro_ipsl_rcp4p5_mississippi.txt with
matsiro_hadgem_rcp4p5_mississippi.txt
matsiro_gfdl_rcp8p5_mississippi.txt with
matsiro_miroc_rcp8p5_mississippi.txt
Run Code Online (Sandbox Code Playgroud)
首先,for
目录循环和文件循环没有区别。完全一样。请记住,在 *nix 上,一切都是文件。
所以,你的循环会是这样的:
for institute in institute1 institute2 institute3
do
for scenario in scenario1 scenario2 scenario3
do
paste "$institute"_*_"$scenario"* > "$institute"_"$scenario".out
done
done
Run Code Online (Sandbox Code Playgroud)
如果您不知道机构和场景名称,您可以对所有文件运行此命令并从文件名中提取它们(只要您的名称不包含空格):
for f in *; do echo "${f/_*} ${f##*_}"; done |
sort -u | while read ins sce; do
paste "$ins"_*_"$sce"* > "$ins"_"$sce".out
done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1815 次 |
最近记录: |