2017-02-02 18 views
1

私は以下の3列のテキストファイルを持っています。私の所望の出力csvファイルで増加する数値で列の値を増やす方法

で、今私は3番目の列をインクリメントしたい

以下
1,A,301 
1,B,301 
1,C,301 

&:

$ cat test.txt 
1,A,300 
1,B,300 
1,C,300 

今まで私がawk -F, '{$3=$3+1;print}' OFS=, test.txt

、と試してみましたが、出力はとして来ています出力は以下のようになります。

1,A,300 
1,B,301 
1,C,302 

希望の出力を得るにはどうすればよいですか?

+0

次の応答のいずれかが答え以外の権利符号を刻むことにより、閉鎖のための答えをupvote /受け入れてくださいあなたの目標にあなたを助けます。 –

答えて

0

このNRが1でそうNRを開始-1あなたに正しい番号を与える

awk -F, '{$3=$3+NR-1;print}' OFS=, test.txt 
2
awk 'BEGIN{x=0;FS=OFS=","} NF>1{$3=$3+x;x++}1' inputfile 
1,A,300 

1,B,301 

1,C,302 

説明すべき試してみてください。

BEGIN Block:それは最初に設定カウンタですxが含まれていますゼロ、FSおよびOFS。 は、空白行を無視するために使用されます(空白行がない場合は、この部分を削除します)。 $3=$3+x:カウンタの値を$3に追加します。 x++:cunterの値をインクリメントします。

+0

x = 0は省略することができます。割り当てられていない変数の値を加算する場合は、デフォルトで0になります。あなたの 'x ++ 'は' $ 3 = $ 3 + x ++ 'に直接含まれ、' $ 3 = $ 3 + 'は' $ 3 + = 'で書き直すことができます。あなたの/./もスペースラインで危険にさらされているかもしれません。おそらく 'NF> 1 'か'/[^ [:blank:]]/'を使ってください。あなたのコードは正しいです。+1 – NeronLeVelu

0

さらに別:

awk 'BEGIN{ FS=OFS="," } ($3+=i++)||1 ' file 
+1

の価値がある仕事をしてください。 '$ 3 + i == 0'の行をスキップします。 – Thor

+1

ゴルフ版の場合は、 'awk '{$ 3 + = i ++} 1' FS =、OFS =、'と表示されます。 – Thor

+0

@Thor Fixed。 ...あなたが短くても... –

2

はラインを想定し、可能性があなたのサンプルのようなシーケンシャル)

awk -F ',' '{sub($3"$",$3+NR-1)}7' YourFile 

それは、インクリメント値としてラインNUMERを使用する行末を変更していないフィールド値があります(awk POVとは異なり、区切り文字で改行する必要はありません)

変更可能な行間の空白または他の行(任意の場合はNFフィルタとしてではなく、もしあれば、それはあなたの基準の依存)

awk -F ',' 'NF{sub($3"$",$3+i++)}7' YourFile