我有一组目录RUN1,RUN2等
在每个目录中,都有一组文件。在每个文件中,有两个数字。例如(这些保存为.csv,即使这里显然没有逗号):
RUN1
mod_1.csv
2.32e-00
1.2e-01
mod_b.csv
4.53e-00
1.1e-01
RUN2
mod_a.csv
1.23e-01
0.5e-02
mod3.csv
1.67e-00
0.4e-01
等
我想这样做:
For each directory:
For each file in a directory:
Sort files by the first entry
Save contents and path of file with smallest value of first entry.
例如,在上面,这将产生一个包含以下内容的新文件:
2.32e-00 1.2e-01 ./RUN1/mod_1.csv
1.23e-01 0.5e-02 ./RUN2/mod_a.csv
我开始尝试这个:
#!/bin/bash
resultfile="best_results.txt"
for d in $(find . -type d -name 'RUN*' | sort);
do
find "$d" -type f -name 'mod*' -exec awk '{print $0, FILENAME}' {} \; >> "$resultfile"
done
但它给了我所有文件的两个值,如:
2.32e-00 ./RUN1/mod_1.csv
1.2e-01 ./RUN1/mod_1.csv
4.53e-00 ./RUN1/mod_b.csv
1.1e-01 ./RUN1/mod_b.csv
1.23e-01 ./RUN2/mod_a.csv
0.5e-02 ./RUN2/mod_a.csv
1.67e-00 ./RUN2/mod_3.csv
0.4e-01 ./RUN2/mod_3.csv
然后我想我需要使用head
,但是这个修改:
find "$d" -type f -name 'mod*' -exec awk '{print $0, FILENAME}' {} \; | head -1 >> "$resultfile"
给了我:
find: `awk' terminated by signal 13
我想我需要另一个sort
,可能head
,但我不能把它放在一起。
编辑(为清晰起见):
我想查看目录中的所有文件,查找具有最小第一个数字的文件,并将该文件的值和文件路径写入新文件。然后,继续下一个目录并执行相同操作。在我的例子中:
目录RUN1
包含文件mod_1.csv
和mod_b.csv
。文件mod_1.csv
具有最小的第一个值。我想在一行上写下它的内容和文件路径:
2.32e-00 1.2e-01 ./RUN1/mod_1.csv
到文件。
目录RUN2
包含mod_a.csv
和mod3.csv
个文件。文件mod_a.csv
具有最小的第一个值。我想在一行上写下它的内容和文件路径:
1.23e-01 0.5e-02 ./RUN2/mod_a.csv
这样新文件看起来像这样:
2.32e-00 1.2e-01 ./RUN1/mod_1.csv
1.23e-01 0.5e-02 ./RUN2/mod_a.csv
我理解在我的编辑前问题中并不清楚这一点。请问你有任何问题!我不确定如何更清楚。
答案 0 :(得分:0)
您可能希望在find
期间删除新的内容:
resultfile="best_results.txt"
for d in $(find . -type d -name 'RUN*');
do
find "$d" -type f -name 'mod*' -exec awk '{printf "%s ",$0} END {print "", FILENAME}' {} \;
done | sort >> "$resultfile"
排序通常在最后完成(一旦从stdout返回所有结果),但是,目前还不清楚您对它的预期排序方式。如果你真的想要的话,你可能可以摆脱for loop
,因为使用如下的东西应该是类似的:
find RUN* -type f -name 'mod*' -exec awk '{printf "%s ",$0} END {print "", FILENAME}' {} \; | sort -k 2,2 >> "$resultfile"
使用-k
选项与sort
一起指定要排序的列。
结果(使用sort -k 2,2):
1.67e-00 0.4e-01 RUN2/mod3.csv
1.23e-01 0.5e-02 RUN2/mod_a.csv
4.53e-00 1.1e-01 RUN1/mod_b.csv
2.32e-00 1.2e-01 RUN1/mod_1.csv