2017-04-16 16 views
0

これはちょっと奇妙ですが、各オカレンスを現在のカウントに置き換えて他の文字をそのまま残して、文字 "N"のインスタンスをカウントしようとしています。例えば:文字を無視してbash列をカウントに変換する

N 
N 
- 
- 
N 
- 
- 
N 
N 
N 

はなるはずです。

1 
2 
- 
- 
3 
- 
- 
4 
5 
6 

は助けに感謝、既存の答えを見つけるために、このほかに記述するように見えることはできません。

+0

bash: 'declare -i a = 0; IFS = read -r行です。 do [[$ line == "N"]] && a = a + 1 && line = $ a; echo "$ line"; done Cyrus

答えて

4
awk '{ if ($1=="N") {a++; print a} else {print} }' file 

出力:

 
1 
2 
- 
- 
3 
- 
- 
4 
5 
6 
+1

私はこれをゴルフに入れましたが、別の答えが必要であるとは思わないでしょう: 'awk' {print $ 1 ==" N "? ++ a:$ 1} '' –

+0

ありがとう!魅力的な作品! –

+0

[私の質問に誰かが答えたときにどうすればいいですか?](0120)をご覧ください: – Cyrus

0

試してみてください。(明確に示されているサンプルINPUT_FILEに基づく)

awk '/^N$/{sub(/N/,++i);}1' Input_file 

だから、文字Nから始まる行をチェックし、その後に文字Nを代入置換が行われるたびに値が増加するiという名前の変数。次に、1を入力すると現在の行が出力され、Input_fileに言及します。

1
$ awk '{print (/N/?++c:$0)}' file 
1 
2 
- 
- 
3 
- 
- 
4 
5 
6 
関連する問題