我有一个包含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
答案 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
第一个循环检查没有文件存在,否则结果将是错误的。