1

我有一个大的报告文件(大约 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 

谢谢。

4

3 回答 3

1

这可能对您有用:

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
于 2012-04-11T18:49:49.900 回答
1

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

sed -r "/^ {15}/{G; s/^ {15}(.*)\n(.{15}).*/\2\1/};h" "report"
于 2012-04-11T19:09:37.343 回答
1

假设您需要保持间距并且前 2 列是前 15 个字符:

awk '
    NF==2 {print fill substr($0, 16); next}
    {print; fill = substr($0, 1, 15)}
'
于 2012-04-11T19:35:59.257 回答