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

时间:2017-02-06 10:05:01

标签: shell file awk

我有一个包含ASCII数据的数据类型(file.dat)文件,包含两列。此文件也按照第一列排序。我想在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

2 个答案:

答案 0 :(得分:1)

您的文件

100.00 321342  
100.00 434243  
100.00 543231  
100.50 743893   

您需要什么

perl -a -nE 'qx( echo "$F[0] $F[1]" >> "Timestep_$F[0]" )' file

输出只是创建两个文件,其中一个名称是 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  

答案 1 :(得分:0)

这个脚本应该做的工作:

#!/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

第一个循环检查没有文件存在,否则结果将是错误的。