我想要做的只是添加一个包含巨大文件编号的列:
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 ...}
,但它不起作用
有什么建议吗?
非常感谢提前
答案 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到最后一个元素