Shell 从单个数据文件创建匹配模式的文件
我有一个数据类型的文件(file.dat),其中包含ASCII数据,由两列组成。此外,此文件还根据第一列进行排序。我想在shell或awk中编写一个脚本,以便为排序文件中的类似记录创建新文件。假设我的文件由(四条记录)组成,如下所示Shell 从单个数据文件创建匹配模式的文件,shell,file,awk,Shell,File,Awk,我有一个数据类型的文件(file.dat),其中包含ASCII数据,由两列组成。此外,此文件还根据第一列进行排序。我想在shell或awk中编写一个脚本,以便为排序文件中的类似记录创建新文件。假设我的文件由(四条记录)组成,如下所示 100.00 321342 100.00 434243 100.00 543231 100.50 743893 因此,根据我的问题,这里应该创建两个文件。根据第一列中的数据,一个文件由前三条记录组成,另一个文件由最后一条记录组成 文件1包含 100.00 3213
100.00 321342
100.00 434243
100.00 543231
100.50 743893
因此,根据我的问题,这里应该创建两个文件。根据第一列中的数据,一个文件由前三条记录组成,另一个文件由最后一条记录组成
文件1包含
100.00 321342
100.00 434243
100.00 543231
文件2包含
100.50 743893
您的文件
100.00 321342
100.00 434243
100.00 543231
100.50 743893
你需要什么
perl-a-nE'qx(echo“$F[0]$F[1]”>>“Timestep\u$F[0]”文件
输出只是创建两个文件,其中一个文件名为Timestep_100.00,另一个文件名为Timestep_100.50,因此它由第一个唯一列的名称分隔。就这样
$ cat Timestep_100.00
100.00 321342
100.00 434243
100.00 543231
和其他文件
$ cat Timestep_100.50
100.50 743893
此脚本应完成以下工作:
#!/bin/sh
exec 0<file.txt
makeit=yes
while read stp num; do
if [ -f "Timestep_$stp" ]; then
echo "File Timestep_$stp exists, exiting."
makeit=no
break
fi
done
if [ $makeit = yes ]; then
exec 0<file.txt
while read stp num; do
echo "$stp $num" >> Timestep_$stp
done
echo "Processing done."
fi
#/垃圾箱/垃圾箱
exec 0 Timestep_u$stp
完成
echo“处理完成”
fi
第一个循环检查文件是否存在,否则结果将是错误的。您尝试了什么吗?是的,我尝试了
awk'{print>>$1;close($1)}'inputfile
,但它将列值作为已创建文件的名称,而我想要Timestep\u column\u值。e、 g.对于上述输入数据文件(通过执行上述awk脚本)创建为100.00和100.50,但我希望文件名应为Timestep_100.00在这种情况下:awk'{print>>Timestep_$1;close($1)}inputfile
@Chris Maes,您应该将注释作为答案,但它需要是awk'{print>>“Timestep_$1;close($1)}“inputfile
,请注意“Timestep\u”
周围的双引号,否则它将被忽略并输出到100.00
和100.50
,而不是Timestep\u 100.00
和Timestep\u 100.50
,基于当前内容和Sachin shinde的评论。@user3439894他/她在问题中从未提到过这一点