我有一个如下所示的数据集:
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解决方案。
答案 0 :(得分:2)
awk
救援!
如果你有tac
,这可能是最简单的
$ tac file | awk -F, -v OFS=, 'NF==1{$2=p} NF>1{p=$2}1' | tac
答案 1 :(得分:1)
这是一个单独的awk解决方案(当文件很大且双tac
很贵时特别方便):
awk -F, 'NF==1{a=a $0 RS; next} a!=""{gsub(RS, FS $2 RS, a); printf "%s", a; a=""} 1' file
TEST,SOMELOG
TESA,SOMELOGA
TESB,SOMELOGB
TESC,SOMELOGB
TESD,SOMELOGB
TESE,SOMELOGC
TESF,SOMELOGC
TESG,SOMELOGC
答案 2 :(得分:0)
我刚刚想出了一个vim解决方案:
<input class="form-control"
placeholder="Category name"
formControlName="name"
required="CATEGORY_REQUIRED"
maxlength="10"
minlength="3"/>
CTRL-V CTRL-N CTRL-V ESC ZZ
说明:
:v/,/norm A,S
我从vimgolf获得了一些想法,这是一个可以发布,播放和讨论日常问题的解决方案的网站。
答案 3 :(得分:0)
我刚刚完成了vimgolf挑战,然后找到了问题......我把解决方案(16次击键)放在这里:
qq2jA,S<C-N><Esc>j.q@qZZ
http://www.vimgolf.com/challenges/5853f052854f48716101cc70
请注意,上面的行只适用于该示例。如果文件格式相同,则可以在录制后多次重放宏。