Shell 从单个数据文件创建匹配模式的文件

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

我有一个数据类型的文件(file.dat),其中包含ASCII数据,由两列组成。此外,此文件还根据第一列进行排序。我想在shell或awk中编写一个脚本,以便为排序文件中的类似记录创建新文件。假设我的文件由(四条记录)组成,如下所示

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他/她在问题中从未提到过这一点