awk 抓取檔案子集

2022-08-05 04:12:24 字數 2110 閱讀 3029

有乙個檔案我只想要裡面的部分樣本資料,檔案結構如下:

$head -1genus.xls

otu id a1 a2 a3 m15b1 m15b2 m15b3 m15c1 m15c2 m15c3 m15d1 m15d2 m15d3 m15e1 m15e2 m15e3 m27b1 m27b2 m27b3 m27c1 m27c2 m27c3 m27d1 m27dm27d3 m27e1 m27e2 m27e3 r15b1 r15b2 r15b3 r15c1 r15c2 r15c3 r15d1 r15d2 r15d3 r15e1 r15e2 r15e3 r27b1 r27b2 r27b3 r27c1 r27c2 r27c3 r27d1 r27dr27d3 r27e1 r27e2 r27e3

0319-6g20_norank 17 22 21 44 24 24 6 15 34 17 18 7 55 29 32 46 78 61 13 2 27 37 61 72 55 146 196 26 24 19 17 16 4 77 45 27 58 47 36 48 37 141 13 28 10 38 87 61 62 83 119

要抓取的樣本名:

$cat group.list 

m15b1

m15b2

m15b3

m27b1

m27b2

m27b3

r15b1

r15b2

r15b3

r27b1

r27b2

r27b3

awk實現:

$awk -f "\t"

'nr==fnrnr>fnr}printf $1;for(i=1;i<=length(b);i++)print""}elseprint""}}

' group.list genus.xls >select.txt

部分結果展示:

$head select.txt

otu id m15b1 m15b2 m15b3 m27b1 m27b2 r15b1 r15b3 r27b2 r27b3

0319-6g20_norank 44 24 24 46 78 26 19 37 1410319-6m6_norank 1 0 0 0 0 10 0 0

1921-2_norank 0 0 1 0 0 1 0 10

1921-3_norank 2 4 1 0 2 1 1 0 2

1959-1_norank 16 13 27 19 11 16 24 17 19

480-2_norank 57 41 84 52 51 40 45 39 52abs-19_norank 2 1 1 0 1 0 1 2 1akiw1012_norank 0 0 0 0 0 0 0 0 0

akyh478_norank 0 0 0 0 0 0 0 0 0

處理過程是  先根據要挑選的樣本名索取在檔案第一行對應樣本名的下標   然後根據樣本下標提取每行資訊

awk print

預設在字元後面加換行符 printf 可以去除這個效果

讀取多行檔案

awk 逐行合併檔案

這段時間多虧大家的幫助,利用awk命令解決了很多問題,在此也總結自己實際運用到的問題,方便其他童鞋一起學習shell。如果兩個檔案行數相同,只是希望逐行合併 方法一 paste d t file 1 file 2 複製 方法二 awk nr fnrnr fnr file 1 file 2 複製 方法...

awk多檔案處理

a.txt內容如下 a 150 b 200 c 100 b.txt內容如下 abcd a 12.5 bbbb b 35 cccc c 42 dddd d 21 想要通過a.txt b.txt得到ba.txt abcd a 12.5 150 bbbb b 35 200 cccc c 42 100 dd...

awk處理日誌檔案

split出所需要的那一段文字,可以split多次,下標從1開始 split src,dst,分隔符 將所需要的鍵值對得到,並按 tab 分割,這裡只需要乙個,放在變數中 awk f print 在每個檔案中對2中得到的不同值 還是鍵值對,但鍵是相同的 進行統計 awk end 對3中得到的資料進行...