awk命令插入除空行之外的相应行号

时间:2012-08-24 10:57:09

标签: awk

我现在正在做一项任务,让我难过的问题是:

  

“编写awk命令以插入相应的行号   上面文本文件中的每一行。空白行不应该是   在这种情况下编号。“

我有一个答案,但我很难找到每个组件所做的解释。

命令是:

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

我知道NF是字段编号,而$0是指整个输入记录。我尝试使用命令来查找什么做了什么,但每当我省略某些内容时,似乎总是会出现语法错误。

所以,我的问题是每个组件的作用是什么? ++a做了什么? ?之后的NF?引号的位是什么?

提前致谢!

2 个答案:

答案 0 :(得分:1)

指令... ? ... : ...if-else。所以,它与:

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

a是一个变量,只有在找到带字段的行时才会递增。

答案 1 :(得分:0)

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

您的解决方案中使用了三元运算符。 对于空行,NF将始终为0 所以

cond?true case:false case

如果NF> 0,则打印或打印“” a ++表示在打印后增加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 }
>