如何连续编号文件的奇数行?

时间:2015-09-24 15:37:06

标签: bash shell awk sed

我想要做的只是添加一个包含巨大文件编号的列:

xxx xxxxx xxxx
xxx xxxxx xxxx
xxx xxxxx xxxx
xxx xxxxx xxxx
xxx xxxxx xxxx

获取下一个输出:

xxx 1 xxxx xxxxx
xxx xxxx xxxx
xxx 2 xxxx xxxxx
xxx xxxx xxxx
xxx 3 xxxx xxxxx

我尝试使用awk '{print NR % 2==1 etc ...},但它不起作用

有什么建议吗?

非常感谢提前

2 个答案:

答案 0 :(得分:7)

你走在正确的轨道上

awk 'NR%2 { $1 = $1" "++i}; 1;' file.txt
对于奇数行,

NR%2评估为真。结果赋值将第一个字段替换为第一个字段中的值加上一个从(从0开始)递增然后连接的数字。 1;始终求值为true,并将默认操作(print)应用于该行。更长但更明确的等价物是NR%2 { $1 = $1" "++i}; {print}

答案 1 :(得分:1)

perl -lane 'if ($. % 2 == 1){$n++; print "$F[0] $n @F[1..$#F]"} else{print}' file.txt

产生输出:

xxx 1 xxxxx xxxx
xxx xxxxx xxxx
xxx 2 xxxxx xxxx
xxx xxxxx xxxx
xxx 3 xxxxx xxxx

说明:

  • -n循环输入文件的每一行,将行放在$ _变量中,不要自动打印每一行

  • -l在处理之前删除换行符,然后将其添加回来

  • -a autosplit模式 - 将输入行拆分为@F数组。

  • -e执行perl代码

$.是行号

@F是每行中的单词数组,从0开始索引 $#F@F中的字数 @F[1..$#F]是元素1到最后一个元素

的数组切片