-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

进入

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
4

2 回答 2

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变量中以供下一个输入行使用。

于 2013-09-13T05:21:55.447 回答
0

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

while read line
do
    # some logic here
done < file_to_read.txt

现在代替“这里的一些逻辑”,您需要检查第一个数字是否与上一行相同。就像是

if [[ "$prevnum" != "$curnum" ]]
then
    echo
fi

您可以使用类似的方法获得第一个空格分隔的数字

set -- $line
curnum=$1

要不然

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

或者

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

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

于 2013-09-13T05:27:34.240 回答