python递归列文件_python-Bash:从最大列递归地向文件写入一行
回到my previous question,我發(fā)現(xiàn)問題并沒有完全解決.這是問題所在:
我有名為RUN1,RUN2和RUN3的目錄
每個(gè)目錄都有一些文件.目錄RUN1具有文件mod1_1.csv,mod1_2.csv,mod1_3.csv.目錄RUN2具有文件mod2_1.csv,mod2_2.csv,mod3_3.csv等.
mod1_1.csv文件的內(nèi)容如下所示:
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
我的目標(biāo)是為每個(gè)RUN *目錄獲取第4列的最小值的行,并將其和將其寫入新的.csv文件的模型寫入.現(xiàn)在,我有以下代碼:
#!/bin/bash
resultfile="best_results_mlp_2.txt"
for d in $(find . -type d -name 'RUN*' | sort);
do
find $d -type f -name 'mod*' -exec sort -k4 {} -g \; | head -1 >> "$resultfile"
done
但是它并不總是返回第4列的最小值(我瀏覽了文件并進(jìn)行了檢查),并且不包括包含最小數(shù)字的文件名.為了澄清,我想要一個(gè)包含以下內(nèi)容的.csv文件:
5.73 6.43 5.76 6.57 mod1_2.csv
5.72 6.29 5.39 5.59 mod2_1.csv
解決方法:
如果要從所有文件中獲取最小值,則必須立即對(duì)所有內(nèi)容進(jìn)行排序.該命令當(dāng)前按文件對(duì)文件進(jìn)行排序,因此您將在第一個(gè)排序的文件中獲得最小值.
檢查之間的區(qū)別
find "$d" -type f -name 'mod*' -exec sort -k4 -g {} +
和
find "$d" -type f -name 'mod*' -exec sort -k4 -g {} \;
另外,除非確實(shí)需要,否則建議使用-n而不是-g.
查看信息coreutils的“一般調(diào)用”的–general-numeric-sort部分,以獲取更多詳細(xì)信息.
編輯:剛剛檢查了您以前的問題的鏈接,現(xiàn)在我看到您需要使用–general-numeric-sort
就是說,這是一種將相應(yīng)文件名放入各行中的方法,以便在輸出中使用它:
find "$d" -type f -name 'mod*' -exec awk '{print $0, FILENAME}' {} \;|sort -k4 -g |head -1 >> "$resultfile"
本質(zhì)上,awk是分別為每個(gè)文件調(diào)用的. Awk打印文件的每一行,并在其后附加相應(yīng)的文件名.然后將所有這些行傳遞進(jìn)行排序.
注意:上面的代碼將打印文件名及其找到文件的路徑.如果您只想獲取文件的基本名稱,則可以改用以下awk命令(其余與上面相同):
awk 'FNR==1{ cnt=split(FILENAME, arr, "/"); basename=arr[cnt] } { print $0, basename}'
標(biāo)簽:python,bash
總結(jié)
以上是生活随笔為你收集整理的python递归列文件_python-Bash:从最大列递归地向文件写入一行的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是jsp的内置对象?
- 下一篇: python像素处理_Python+Op