上一个脚本无法处理类似下面这样的:
这个标题也被不同程度的截断了,这里的脚本只适用这个特定的场景,如:
#!/bin/bash
input_file=$1
output_file=output_$1
current_line=""
previous_line=""
flag=true
if [ $# -ne 1 ]; then
echo "Usage: $0 file_name"
exit
fi
if [ -f "$output_file" ]; then
rm "$output_file"
fi
cat $input_file | while read line
do
current_line="$line"
#查找以 |、 空白符、字母、空白符结尾
if [[ "$line" =~ \|[[:space:]]*[a-z]*[[:space:]]{1,}+$ ]];then #这里包含了标题的判断
flag=true
previous_line=$(echo "$line" | sed -E 's/[[:space:]]+$//')
elif [[ "$line" =~ \|[[:space:]]*[a-z]*\( ]];then #处理标题是以 "total(" 结尾的
flag=true
previous_line=$(echo "$line" | sed -E 's/[[:space:]]+$//')
else
if $flag ;then #下面主要是否加几个空格的判断
if [[ "$previous_line" =~ [a-zA-Z]+$ ]];then
current_line="$previous_line""$line"
elif [[ "$previous_line" =~ [a-zA-Z]*\( ]];then
current_line="$previous_line""$line"
else
current_line="$previous_line"" $line"
fi
fi
flag=false
echo "$current_line" >> "$output_file"
fi
done
效果很好,完美解决!