2012-08-24 99 views
1

我目前做的轉讓而這難倒我的問題中插入相應的行號是:awk命令除了空行

「寫一個awk命令 前插入相應的行號在上面的文本文件中的每一行,在這種情況下,空行不應該是 。

我有一個答案,但我很努力地找到每個組件所做的解釋。

的命令是:

awk '{print (NF? ++a " " :"") $0}' <textfile.txt> 

我知道NF是外地號碼,而且$0指整個輸入記錄。我試着玩弄命令來找出什麼是什麼,但是每當我忽略某些東西時,它總是會出現語法錯誤。

所以,我的問題是每個組件做什麼? ++a做什麼? ?NF?和引用的位有什麼關係?

在此先感謝!

+1

如果空行進行計數,但沒有編號? –

回答

1

指令... ? ... : ...這是一個if-else。所以,這是一樣的:

if (NF > 0) { 
    ++a; 
    print a " " $0; 
} else { 
    print $0; 
} 

a是發現場的線路時纔會加一個變量。

+0

謝謝,這更有意義! – shans91

0
print (NF? ++a " " :"") $0 

三元運算符已用於您的解決方案。 爲一個空行NF將爲0總是 所以

cond?true case:false case 

如果NF> 0然後打印或者打印「」 一個++說,通過1印刷增量之後將被用於下一非空白在線處理。

awk 'BEGIN{count=1}{if($0~/^$/){print}else{print count,$0;count++}}' your_file 

以下測試:

> cat temp.cc 
int main() 
{ 

} 
> awk 'BEGIN{count=1}{if($0~/^$/){print}else{print count,$0;count++}}' temp.cc 
1 int main() 
2 { 

3 } 
> 
+2

您的說明中包含'a ++',與具有'++ a'且不正確的代碼不匹配。變量'a'在打印之前遞增*。 –

+0

awk在數字上下文中將未初始化的變量視爲0,因此您不需要begin子句。不要害怕空白,即使是單行的:可讀性很重要。用awk樣式編寫:'awk'/^[[:space:]] * $/{print;下一個} {print ++ count,$ 0}'文件' –