VIM:在同一列中的值替换第二栏空白,如果空
问题描述:
我有一个数据集,看起来像这样:VIM:在同一列中的值替换第二栏空白,如果空
TEST,SOMELOG
TESA,SOMELOGA
TESB
TESC
TESD,SOMELOGB
TESE
TESF
TESG,SOMELOGC
需要使它看起来像这样:
TEST,SOMELOG
TESA,SOMELOGA
TESB,SOMELOGB
TESC,SOMELOGB
TESD,SOMELOGB
TESE,SOMELOGC
TESF,SOMELOGC
TESG,SOMELOGC
凡,SOMELOGB
如果第二列为空,则,SOMELOGC
将替换每个/r
回车。替换只发生在第二列空白的情况下,并且应该替换为非空白行。会考虑一个bash/sed/awk或vim解决方案。
答
awk
来救援!
如果你有tac
,这可能是最简单的
$ tac file | awk -F, -v OFS=, 'NF==1{$2=p} NF>1{p=$2}1' | tac
+0
漂亮的作品 – 4reel77
答
我有只是想出了一个vim解决方案:
:v/,/norm A,S
Ctrl-vCTRL-NCTRL-VEsc键 ZZ
说明:
: ............. command mode
: v/,/ ........ match lines that not have ','
norm .......... normal mode
A ............. append text at the end of line
, ............. literal ','
S ............. inserts the first letter to use completion after
<Ctrl-v> ...... used to insert literal keyboard shortcuts
<Ctrl-n> ...... complete with the first completion option of vim
Esc ........... used to exit insert mode
ZZ ............ fast way to save and exit an existing file
我从vimgolf采取了一些想法,一个网站,你可以发布,播放和讨论VIM解决日常问题。
答
我刚才做了vimgolf挑战,那么发现的问题......我把我的解决方案(16个按键)位置:
qq2jA,S<C-N><Esc>[email protected]
http://www.vimgolf.com/challenges/5853f052854f48716101cc70
注意,上面的代码只适用于这个例子。如果文件的格式相同,则可以在录制它之后多次重播宏。
文件有多长时间,如果你有一个纯粹的'bash'解决方案,而不是'awk'或'sed',它可以吗? – Inian
该文件约为400行,但对bash解决方案感兴趣。 – 4reel77