作为this question的扩展,我现在不仅要知道文件名,还要知道最多k个位置的目录。这就是问题所在:
我有名为RUN1
,RUN2
和RUN3
的目录
每个目录都有一些文件。目录RUN1
包含文件mod1_1.csv
,mod1_2.csv
,mod1_3.csv
。目录RUN2
包含文件mod2_1.csv
,mod2_2.csv
,mod3_3.csv
等。
mod1_1.csv
文件的内容如下所示:
5.71 6.66 5.52 6.90
5.78 6.69 5.55 6.98
5.77 6.63 5.73 6.91
mod1_2.csv
看起来像这样:
5.73 6.43 5.76 6.57
5.79 6.20 5.10 7.01
5.71 6.21 5.34 6.81
在RUN2中,mod2_1.csv如下所示:
5.72 6.29 5.39 5.59
5.71 6.10 5.10 7.34
5.70 6.23 5.23 6.45
mod2_2.csv看起来像这样:
5.72 6.29 5.39 5.69
5.71 6.10 5.10 7.32
5.70 6.23 5.23 6.21
我的目标是为每个RUN *目录获取第4列最小值的行,并将其和给出它的模型以及部分路径写入新的.csv文件。现在,我有这个代码:
#!/bin/bash
resultfile="best_results_mlp_onelayer.txt"
for d in $(find . -type d -name 'RUN*' | sort);
do
find "$d" -type f -name 'mod*' -exec awk '{print $0, FILENAME}' {} \;|sort -k4 -g |head -1 >> "$resultfile"
done
这给了我:
5.73 6.43 5.76 6.57 ./RUN_1/mod1_2.csv
5.72 6.29 5.39 5.59 ./RUN_2/mod2_1.csv
但我想要一个包含以下内容的.csv文件:
5.73 6.43 5.76 6.57 ./DIR1/DIR2/DIR3/RUN_1/mod1_2.csv
5.72 6.29 5.39 5.59 ./DIR1/DIR2/DIR3/RUN_2/mod2_1.csv
我的密码是/DIRk/DIRm/DIRl/DIR1/DIR2/DIR3
编辑:
根据回复,我的意思是“回位”'是:
现在,我的代码将./RUN_1/mod1_2.csv
作为第一行中的最后一列值。对我来说,这是一个后退的位置,因为它显示了文件mod1_2.csv
所在的目录。我希望路径能够回到原来的位置。也就是说,我想./DIR1/DIR2/DIR3/RUN_1/mod1_2.csv
。我说' k'因为这是一个共同的占位符,我希望我可以在那里替换一个数字。
答案 0 :(得分:1)
根据dgeorgiev的回答,我将收集代码的结果放在层次结构中更深层的目录中。所以,继续我的问题,如果我的pwd
是/DIRk/DIRm/DIRl/DIR1/DIR2/DIR3
,我将.sh文件移至DIRk/DIRm/DIRl
。然后我跑了这个:
#!/bin/bash
resultfile="best_results_mlp.txt"
for d in $(find . -type d -name 'RUN*' | sort);
do
find "$d" -type f -name 'mod*' -exec awk '{print $0, FILENAME}' {} \;|sort -k4 -g |head -1 >> "$resultfile"
done
结果是,按照需要:
5.73 6.43 5.76 6.57 ./DIR1/DIR2/DIR3/RUN_1/mod1_2.csv
5.72 6.29 5.39 5.59 ./DIR1/DIR2/DIR3/RUN_2/mod2_1.csv
答案 1 :(得分:0)
我在这些CSV中看不到任何逗号。我假设你只是用空格分开。由于您已经在find
行中使用了awk,我想我们可以假设您对基于awk的选项持开放态度。
$ find . -type f
./RUN1/mod1_1
./RUN1/mod1_2
./RUN2/mod2_1
./RUN2/mod2_2
$ awk 'NR == 1 {n=$4} $4 > n {n=$4; f=FILENAME} END {print f,n}' RUN*/mod*
RUN2/mod2_1 7.34
这使用awk内置变量FILENAME
,它始终包含当前文件的名称。
我无法从你的问题中看出“k position back”是什么意思,但你可以根据自己的意愿去除或解析这个输出。
答案 2 :(得分:0)
继我在上一个问题中的答案之后:
find
使用找到它的路径传递文件。因此,如果您在"/path/to/$d"
中搜索,则会获得"/path/to/$d/filename.csv"
。只需在您想要的路径中进行find
搜索即可。
因此,如果您的RUN*
目录位于/path/to/
,并且您希望结果中包含./to/RUNx/filename.csv
,那么您可以随时
cd /path/ && find ./to/RUNx/ # ...
如果您需要绝对路径,则可以在find
/path/to/RUNx
更改目录时要小心,并确保在必要时更改回您所需的位置。 (例如,您可能必须提供输出文件的路径)
答案 3 :(得分:-1)
这样的事情
// Menu
jQuery(function($) {
$('.header-menu-toggle').on('click', function(e){
e.preventDefault();
$('.tab-nav-menu >ul >li').animate({
opacity: 0
}, 200).animate({
bottom: '-25px'
}, 50);
if($('.tab-nav-menu').hasClass('tab-invisible') ){
$('.tab-nav-menu').css({'right':'-1em'});
$('.tab-nav-menu').removeClass('tab-invisible').addClass('tab-visible');
$(this).find('.burg').addClass('activeBurg');
}
else{
$('.tab-nav-menu').css({'right':'-100%'});
$('.tab-nav-menu').removeClass('tab-visible').addClass('tab-invisible');
$(this).find('.burg').removeClass('activeBurg');
}
var delay = 600;
var duration = 400;
if( $(".header-navigation-menu").hasClass("strip-header-menu") ){
delay = 250;
}
$('.tab-nav-menu >ul >li').each(function(){
$(this).delay(delay).animate({
opacity: 1,
bottom: 0,
}, duration);
delay += 150;
});
})
});
(抱歉我最初误解了您的要求,编辑以纠正问题)