2012-08-24 96 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}'文件' –