2013-12-23 29 views
29

谁能告诉我如何使用awk打印包括零的行号?使用awk打印从零开始的行号

这里是我的输入文件stackfile2.txt

当我运行下面的awk命令我得到actual_output.txt

awk '{print NR,$0}' stackfile2.txt | tr " ", "," > actual_output.txt 

,而我的预期输出是file.txt

如何打印开始行号零(0)?

+1

是不是'awk'{print NR-1,$ 0}''? –

+0

是的,谢谢安东 – user790049

+1

@ user790049,不要让我们追逐链接来找出问题所在。显示一个小样本输入并告诉我们你想要输出的样子。 http://stackoverflow.com/help/how-to-ask –

回答

46

NR从1开始,所以使用

awk '{print NR-1 "," $0}' 
+1

将输出字段分隔符设置为逗号:awk -v OFS =“,”{print NR-1,$ 0}'文件'可能会更好。 – fedorqui

7

用awk。

我从0开始,i++会递增i的值,但返回递增前我保留的原始值。

awk '{print i++ "," $0}' file 
+1

+对于比NR-1短一个字符你也可以使用'awk'{print i ++,$ 0}'OFS =,file',但是这会更长。 – Jotne

+2

@Jotne当打高尔夫时,'awk'$ 0 = i ++“,”$ 0''击败它;-) –

0

如果Perl是一种选择,你可以试试这个:

perl -ne 'printf "%s,$_" , $.-1' file 

$_是行
$.是行号

1

除了awk的另一个选择是nl它允许选项-v设置起始值,-n <lf,rf,rz>左对齐,右对齐,前导零对齐。您还可以在字段分隔符中包含-s,例如-s ","用于逗号分隔行号和数据。

在Unix环境中,这是可以做到

cat <infile> | ...other stuff... | nl -v 0 -n rz 

或简单地

nl -v 0 -n rz <infile> 

实施例:

echo "Here 
are 
some 
words" > words.txt 

cat words.txt | nl -v 0 -n rz

输出:

000000  Here 
000001  are 
000002  some 
000003  words