1

我现在正在做作业,让我难过的问题是:

“编写一个 awk 命令,在上面的文本文件中的每一行之前插入相应的行号。在这种情况下,不应对空行进行编号。”

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

命令是:

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

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

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

提前致谢!

4

2 回答 2

1

指令... ? ... : ...是一个if-else. 因此,它与以下内容相同:

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

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

于 2012-08-24T11:04:49.273 回答
0
print (NF? ++a " " :"") $0

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

cond?true case:false case

如果 NF > 0 则打印 a 或 print "" a++ 表示在打印后将 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 }
> 
于 2012-08-24T12:38:42.117 回答