2013-12-23 17 views
29

awkを使用してゼロを含む行番号を印刷する方法を教えてもらえますか?ここでawkを使用してゼロから始まる行番号を印刷する

は私の入力ファイルは、私はawkコマンドの下に実行したときに、私の予想出力は私が始まる行番号を印刷するにはどうすればよいfile.txt

であるのに対し、私はactual_output.txt

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

を取得stackfile2.txt

ですゼロ(0)?

+1

'awk' {print NR-1、$ 0} ''ではありませんか? –

+0

はいありがとうございましたAnton – user790049

+1

@ user790049、問題を見つけるためにリンクを追いかけることはありません。小さなサンプル入力を表示し、出力をどのように表示するかを教えてください。 http://stackoverflow.com/help/how-to-ask –

答えて

46

NRは1から始まり、そのawkを使用し

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

出力フィールド区切り文字をカンマ:awk -v OFS = "、" '{print NR-1、$ 0}'ファイル 'に設定する方が良いかもしれません。 – fedorqui

7

を使用します。

0から始まり、i++はiの値をインクリメントしますが、インクリメント前に保持していた元の値を返します。 Perlはオプションがある場合は

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

+ 'NR-1'より1文字短いawk '{print i ++、$ 0}' OFS =、file'を使用することもできますが、これはもっと長くなります。 – Jotne

+2

@Jotneゴルフのために外出するとき、 'awk '$ 0 = i ++"、 "$ 0''はそれを打ち負かします;-) –

0

、あなたはこれを試すことができます。

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

$_がライン
$.であることはawkのほかに別のオプションは、オプションが可能になりますnlある行番号

1

です開始値を設定する場合は-v、左端、右端、右端には-n <lf,rf,rz>を、先頭に0を付けることができます。また、行番号とデータの間をコンマ区切りにするには、-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 
関連する問題