我在制表符分隔的文本檔案中有一個類似于資料的矩陣。例如:
a b c d
a 0.1 0.5 0.3 0.0
b 0.9 0.2 0.4 0.7
c 0.2 0.0 0.6 0.5
d 0.0 0.5 0.3 0.1
我想要 tsv 檔案中的這個矩陣資料,使得第一列是行索引,第二列是列索引,第三列是值。例如前 4 行如下:
a a 0.1
a b 0.5
a c 0.3
a d 0.0
我的檔案很大。它大約是 5000 X 5000 矩陣;所以起始輸入檔案有 ~5000 行和 5000 列。我想通過一系列文本處理步驟來做到這一點,但有沒有更好的方法在 linux 上做到這一點?
uj5u.com熱心網友回復:
現在這看起來像是 awk 的作業:
awk '
NR==1 { split($0, cols); next }
{ for(col in cols) {
print $1, cols[col], $(col 1)
}
}' \
matrix
這個小 awk 程式……
- 將列標題存盤到變數
cols中。該行被拆分,就像 awk 已經對其他行所做的那樣(在空白處拆分)。這是通過僅對第一行 (NR==1) 執行第一個塊來完成的。next跳過所有其他陳述句并繼續到下一行。 - 對于所有其他行,它遍歷從第一行提取的列(
for (col in cols)),然后列印當前行的第一列($1,即行標題),然后列印列標題(cols[col]),最后列印相應的單元格當前行 列組合。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/523734.html
標籤:linux矩阵
