在上一篇文章(如何使用列的最后一個數字的增量連接檔案的內容)的行中,我需要幫助解決一些不同的問題。
現在我喜歡每列的增量(1 到 5 次)(可以是 2nd、3rd ....nth 肯定只會以“1”開始和結束)除了第一列(可能從 1 開始但結束任何數字)。
輸入檔案:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
需要的輸出:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2
TCTA 15 TCTG 2 TCTA 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3
TCTA 15 TCTG 3 TCTA 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4
TCTA 15 TCTG 4 TCTA 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5
TCTA 15 TCTG 5 TCTA 5
我試圖合并上一篇文章中的代碼,但到目前為止還沒有成功..
awk -v n=3 '
{
rec = rec $0 RS
}
1
END {
for (i=2; i<=n; i)
printf "%s", gensub(/[0-9] (\n|$)/, i "\\1", "g", rec)
}' file
這里的問題是它只需要最后一列,但是我需要任何列但第一列。
請幫忙。
謝謝
uj5u.com熱心網友回復:
可能是輸出不是很好看,但最簡單的是這樣的:
awk -v n=5 '{ for(i=1;i<=n; i) a[i,NR]=sprintf("%-8s%-4d%-8s%-4d%-8s%-4d",$1,$2,$3,i,$5,i) }
END { for(i=1;i<=n; i) for(j=1;j<=NR; j) print a[i,j] }' file
uj5u.com熱心網友回復:
假設:
- 第一個數字列不包括個位數
1 - 對于要遞增的所有其他列,源/輸入列的值是
1(即,我們只會遞增包含單個 的列1) - 最終結果:
1用遞增的值替換所有出現的單個數字 - 列數事先未知
- 列數可能因行而異
修改 OP 的當前awk代碼以1's使用遞增值替換所有獨立代碼:
awk -v n=5 '
{
rec = rec $0 RS
}
1
END {
for (i=2; i<=n; i) {
x=gensub(/([^[:digit:]])1([^[:digit:]])/, "\\1" i "\\2", "g", rec)
printf "%s", gensub(/([^[:digit:]])1([^[:digit:]])/, "\\1" i "\\2", "g", x)
}
}' file
在哪里:
([^[:digit:]])1([^[:digit:]])匹配一個非數字字符(捕獲組#1) 單個1一個非數字字符(捕獲組#2)"\\1" i "\\2"- 替換為捕獲組 #1 當前增量值(i=2..5在本例中) 捕獲組 #2- 我們執行 2 次
gensub()呼叫來解決連續數字列包含單個1(注意:可能有一種方法可以通過單個函式呼叫來做到這一點,但我目前正在繪制一個空白......開放給來自awkers在社區)
使用修改后的輸入檔案來演示連續數字列問題:
$ cat file
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
這會產生:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2 2 2
TCTA 15 TCTG 2 TCTA 2 2 2 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3 3 3
TCTA 15 TCTG 3 TCTA 3 3 3 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4 4 4
TCTA 15 TCTG 4 TCTA 4 4 4 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5 5 5
TCTA 15 TCTG 5 TCTA 5 5 5 5
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341198.html
