2010-08-23 98 views
3

上週我讀了關於sed的內容,現在我使用sed從文件中提取了一些內容,很好,現在我想改變第一列中的數據行號說sed或awk,更新第一列數據

1 3 3 0 0 0 1 3 35 34 
16 3 3 0 0 0 34 35 33 19 
31 3 3 0 0 0 19 33 71 68 
46 3 3 0 0 0 68 71 72 69 
61 3 3 0 0 0 69 72 73 70 
76 3 3 0 0 0 70 73 67 53 

並將第一列更改爲1到6,我怎麼能在awk或sed中做到這一點? 最佳, 了Umut

回答

1

絕對awk對於這種情況。我可以通過sed完成這個工作的最簡單的方法如下。

cat file | sed "s/^[0-9]*//g;=;" | sed -n "N;s/\n//g;p" 

當第一表達刪除第一數目,並打印從讀管的行號=

第二個sed表達式一次檢索兩行並刪除換行\n

這可能不是通過兩個連續的表達式完成的,因爲=命令會直接將行號寫入標準輸出,這不能被捕獲。所以我不得不再次撥打另一個sed電話。

0

你可以嘗試這樣的事情
回聲 「1 3 3 0 0 0 1 3 35 34」 | SED的/^1/A/G'

變遷到您需要的號碼,我認爲第一列是行的開頭

+0

說如果我想在一個循環中做這個循環,我循環遍歷行,並確實以這種方式更新第一列,它是行的開始。我猜awk是一個更好的選擇,因爲在語言中有一些構造。我不知道雖然... – 2010-08-23 08:31:26

+0

和第一列並不總是以1開頭。 – ghostdog74 2010-08-23 08:33:00

6

用awk

awk '$1=NR' file 
+0

謝謝,這是訣竅,請繼續閱讀手冊... – 2010-08-23 08:36:07

+0

@Umut:如果此答案解決了您的問題,請考慮接受它通過點擊它旁邊的複選框。 (+1 Awk是這個工作的最佳工具。) – schot 2010-08-23 08:57:30