我有一个大型报告文件(大约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
感谢。
答案 0 :(得分: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
答案 1 :(得分:1)
假设没有空白行,并且列间分隔符是空格,以下工作(在Ubuntu / bash shell中测试,使用GNU sed)...
sed -r "/^ {15}/{G; s/^ {15}(.*)\n(.{15}).*/\2\1/};h" "report"
答案 2 :(得分:1)
假设您需要保留间距,前两列是前15个字符:
awk '
NF==2 {print fill substr($0, 16); next}
{print; fill = substr($0, 1, 15)}
'