2017-04-16 63 views
0

这有点奇怪,但我试图计算列中字符“N”的实例,用当前计数替换每个出现的字符,并保持其他字符不变。例如:将bash列转换为计数,同时忽略字符

N 
N 
- 
- 
N 
- 
- 
N 
N 
N 

应该改为:

1 
2 
- 
- 
3 
- 
- 
4 
5 
6 

似乎无法描述这口井发现现有的答案,感谢帮助。

+0

用bash:'declare -i a = 0;而IFS =读取-r行; do [[$ line ==“N”]] && a = a + 1 && line = $ a;回声“$线”;完成<文件' – 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

请看看:[我应该怎么做当有人回答我的问题?](http://stackoverflow.com/help/someone-answers) – 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