在以不同数字开头的字符串之间插入空行

时间:2013-09-13 05:14:36

标签: bash

请帮助我。 我想转换文件

1.0  0.1  0.02
1.0  0.2  0.04
1.1 -0.2 0.1
1.1 -0.1 0.1
1.2  1.0   0.2

1.0  0.1  0.02
1.0  0.2  0.04

1.1 -0.2 0.1
1.1 -0.1 0.1

1.2  1.0   0.2

2 个答案:

答案 0 :(得分:2)

您可以使用awk

执行此操作
pax> echo '1.0  0.1  0.02
1.0  0.2  0.04
1.1 -0.2 0.1
1.1 -0.1 0.1
1.2  1.0   0.2' | awk 'last!=""&&last!=$1{print""}{print;last=$1}'

输出是:

1.0  0.1  0.02
1.0  0.2  0.04

1.1 -0.2 0.1
1.1 -0.1 0.1

1.2  1.0   0.2

将其分解,last最初设置为空字符串。那么代码就是:

last != "" && last != $1 { print "" }
                         { print; last = $1}

第一个子句将选择第一个字段与前一个第一个字段(第一个输入行除外)不匹配的所有输入行。如果匹配,则输出一个空行。

第二个子句选择所有输入行(无条件部分)并简单地输出当前输入行并将其第一个字段保存到last变量中,以便在下一个输入行中使用。

答案 1 :(得分:0)

首先,您需要遍历文件的行。像

这样的东西
while read line
do
    # some logic here
done < file_to_read.txt

现在代替&#34;这里有一些逻辑,&#34;你需要检查第一个数字是否与前一行相同。像

这样的东西
if [[ "$prevnum" != "$curnum" ]]
then
    echo
fi

您可以使用类似

的内容获取第一个空格分隔数字
set -- $line
curnum=$1

或者

curnum=$(echo $line | awk '{print $1}')

curnum=$(echo $line | cut -d' ' -f2)

我会让你从那里把它放在一起。