2017-02-28 68 views
2

我有一個目錄中的文件列表。例如,下面的文件是顯示第一行的每個文件的名稱(它在每個文件中都有其他幾行並不重要)。爲目錄中的多個文件設置閾值

組別1

8 325 
quick brown fox jumped 
Over the lazy dog 

組2

8 560 
There is more content here 

組3

7 650 

我想讀的第一併檢查第一個值是否等於8,第二個值是否大於500.如果滿足此條件,則將文件的名稱打印到新的文本文件中。

結果

Group2 

我嘗試使用

for f in *.Group; 
do head -n1 *.Group > new-file; 
done 

這給了我與頭名的文件和每個文件的目錄中的第一行

=> Group1 <= 
8 325 

=> Group2 <= 
8 560 

=> Group3 <= 
7 650 

現在,我想根據閾值過濾文件,但不是su重新如何將所有標題轉換爲第一列並將相應的值轉換爲第二列。然後很容易應用閾值並過濾文件。還是有更好的方法來做到這一點?

+0

因此,您的文件被稱爲'Group1'或'Group1.Group'? – FloHe

+0

Group1,group2,..等 – Paul

回答

4

您可以使用awk

awk 'FNR==1 && $1==8 && $2>500{print FILENAME}' *.Group > Result 

說明:

# FNR contains the number of line of the current(!) input 
# file. Check if the conditions are met and print the filename 
FNR==1 && $1==8 && $2>500 { 
    print FILENAME 
} 

上述解決方案應與awk任何版本。如果您有GNU awk,則可以利用nextfile表達式。使用它,您可以在處理完第一行後跳過輸入文件的其餘行:

# Check if the conditions are met and print the filename in that case 
$1==8 && $2>500 { 
    print FILENAME 
} 

# Skip the remaining lines in the current file and continue 
# with the next file 
{ 
    nextfile 
} 
+0

因此我檢查了文件awk -F'''{print NF}'Group1第一行中的字段數,它顯示爲6,因此在這種情況下解決方案可能會有點不同,因爲它們不只是兩個獨立的領域。 – Paul

+0

'-F'''將行分割成單獨的字符。 'Group1'有6個字符,這是正確的。所以你是什麼意思? – hek2mgl

+0

對不起,只是困惑。作品完美無瑕! – Paul

相關問題