我有一個包含多列的測試文件。我想根據包含數值的第8列進行排序,然後抓取前10%的行並將它們導出到新文件。如何抓取文本文件中第一個10%的行?
我寧願在bash中這樣做。我知道我可以對sort進行排序-k8 -n,但是我一直無法完成第二項任務。
對於輸出:
如果我的文本文件中有1000行,我只希望在第一100
文件是製表符分隔。
謝謝!
我有一個包含多列的測試文件。我想根據包含數值的第8列進行排序,然後抓取前10%的行並將它們導出到新文件。如何抓取文本文件中第一個10%的行?
我寧願在bash中這樣做。我知道我可以對sort進行排序-k8 -n,但是我一直無法完成第二項任務。
對於輸出:
如果我的文本文件中有1000行,我只希望在第一100
文件是製表符分隔。
謝謝!
如果你能適應在內存中的整個文件,那麼你可以將輸出發送到AWK:
sort -nk8 file | awk '{ a[NR] = $0 } END {
for (i = 1; i <= NR/10; ++i) print a[i]
}'
每一行保存在陣列a
,由行號索引英寸第一行NR/10
行被打印。
如果你有GNU awk的,你甚至可以做排序的同時:由數
awk '{ a[NR] = $0 } END {
asort(a, b, "@val_num_asc"); for (i = 1; i <= NR/10; ++i) print b[i]
}' file
一旦所有的(未分類)線被讀取,asort
按升序排序。
另一種方法是輸出的sort
結果到一個文件,然後使用這樣的事情:
head -n $(($(wc -l < file)/10)) file
記住,外殼算術是整數而已,所以如果你在你的文件1009線這將只輸出100.
這兩個工作都很完美,謝謝!我知道必須有一種方法可以將wc -l/10公式轉換爲頭部選項,但我根本找不到如何。謝謝! – System
你試過用谷歌尋找什麼?似乎你需要使用搜索條件「bash獲取第一行文件」,「bash在文件中計數行數」,「bash除整數」 – activedecay
如果你知道你需要的行數(目前爲100行),那麼爲什麼不簡單地使用:'head -n 100'? –
我已經試過看各種谷歌搜索。有很多方法可以抓取前N行,但我需要前N行。 @KristoMägi這是一個例子,我的管道運行數百個樣本,併爲每個樣本調用「綁定網站」,並且數字總是大不相同,這就是爲什麼我想要獲得前10%的原因。 – System