Powershell 如何用上行中的单词填写文本文件中的空格?

Powershell 如何用上行中的单词填写文本文件中的空格?,powershell,sed,grep,Powershell,Sed,Grep,我有一个大的报告文件(大约20MB),看起来像这样: 586 700006207 8,622.09 896 9,882.82 896 777 68607099 900.00 896 587 800006207 7,059.22 896 959.02 896 697.87

我有一个大的报告文件(大约20MB),看起来像这样:

 586  700006207        8,622.09  896 
                       9,882.82  896 
 777   68607099          900.00  896 
 587  800006207        7,059.22  896 
                         959.02  896 
                         697.87  896 
   7  280667985             .00  899 
如果值与上一行相同,则第1列和第2列为空白。我需要一个grep/sed/powershell一行程序的帮助来填充空白,这样看起来像这样:

 586  700006207        8,622.09  896 
 586  700006207        9,882.82  896 
 777   68607099          900.00  896 
 587  800006207        7,059.22  896 
 587  800006207          959.02  896 
 587  800006207          697.87  896 
   7  280667985             .00  899 

谢谢。

这可能适合您:

sed ':a;$!N;/^\(\( [0-9]\+ *[0-9]\+\).*\n\)\( \{15\}\)/{s//\1\2/;ta};P;D' file
根据您提供的数据,行始终以空格开头。如果情况并非如此,则:

sed ':a;$!N;/^\(\([0-9]\+ *[0-9]\+\).*\n\)\( \{14\}\)/{s//\1\2/;ta};P;D' file

假设没有空行,列间分隔符是空格,下面的工作(在Ubuntu/bash shell中测试,使用GNU sed)


假设需要保持间距,且前2列为前15个字符:

awk '
    NF==2 {print fill substr($0, 16); next}
    {print; fill = substr($0, 1, 15)}
'

第一行很好!!!我在windows xp上运行gnu unix工具,所以我不得不使用双引号。谢谢。thx glenn,我没有办法测试它,因为我没有awk,但它看起来很简单。
awk '
    NF==2 {print fill substr($0, 16); next}
    {print; fill = substr($0, 1, 15)}
'