请帮助我。 我想转换文件
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
答案 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)
我会让你从那里把它放在一起。