File 如何使用shell脚本将此txt文件拆分为小文件?

File 如何使用shell脚本将此txt文件拆分为小文件?,file,shell,awk,split,File,Shell,Awk,Split,我想把一个txt文件分为几个小文件。但是,我不知道如何使用shell编写脚本。如果有人能帮忙,我们将不胜感激 我要按如下方式拆分的文件: name Onsetime duration weight s002_run1_fng 122.6 2 1 s002_run1_fng 144.8 2 1 s002_run1_fyg 132.6 2 1 s002_run1_fyg 182.6 2 1 s002_run1_fyg 198.6 2 1 s002_run1_fy

我想把一个txt文件分为几个小文件。但是,我不知道如何使用shell编写脚本。如果有人能帮忙,我们将不胜感激

我要按如下方式拆分的文件:

name    Onsetime    duration    weight
s002_run1_fng   122.6 2 1
s002_run1_fng   144.8 2 1
s002_run1_fyg   132.6 2 1
s002_run1_fyg   182.6 2 1
s002_run1_fyg   198.6 2 1
s002_run1_fyg   230.6 2 1
s002_run1_fyg   308.6 2 1
s002_run1_fyg   368.6 2 1
s002_run1_fyg   382.6 2 1
s002_run1_fyg   410.6 2 1
s002_run1_fnl   294.8 2 1
s002_run1_fnl   394.8 2 1
s002_run1_fyl   66.6 2  1
s002_run1_fyl   78.6 2  1
s002_run1_fyl   158.6 2 1
s002_run1_fyl   207.1 2 1
s002_run1_fyl   257.4 2 1
s002_run1_fyl   269.2 2 1
s002_run1_fyl   319.2 2 1
s002_run1_fyl   327.3 2 1
s002_run1_fnn   52.8 2  1
s002_run1_fnn   280.7 2 1
s002_run1_fnn   350.8 2 1
s002_run1_fyn   96.6 2  1
s002_run1_fyn   110.6 2 1
s002_run1_fyn   169.3 2 1
我想将文件拆分为新的txt文件,第一列是新文件的名称,第二到第四列是新文件的内容。如果第一列相同,则第二到第四列将组成一个新文件。例如,第一个文件的内容是

122.6 2 1
144.8 2 1
新文件名将是“
s002\u run1\u fng

如何使用shell编写代码


谢谢大家!!非常感谢你的帮助

awk one liner可以满足您的需求,试一试:

awk 'NR>1{print $2,$3,$4 > $1}' file

嗯,这并不意味着你只是得到了代码,所以,一些初学者:你需要循环浏览你当前的文本文件;在循环中,用空格分隔列,创建一个文件,将内容打印到该文件,然后关闭该文件是的,您的代码正常!伟大的非常感谢你!或者我必须手动完成。这太费时了。然而,还有另一个问题。当我运行您提供的代码时,终端说:awk:s002_run3_fyn使太多打开的文件输入记录编号87,file feedback.txt源代码行编号1它只生成了17个文件。我怎样才能解决这个问题?多谢各位@杨梅很乐意帮忙。对于打开的文件太多的问题,您可以尝试以下方法:首先删除上次运行时生成的所有文件(如果有)。然后执行
awk'NR>1{打印$2,$3,$4>>1;关闭($1)}文件
非常感谢您的帮助!代码有效!这项工作在两秒钟内完成了。非常感谢!但是,当我对文件使用相同的代码时(该文件具有类似的结构),它不起作用。终端没有报告错误,但它没有生成文件。您能再次帮助我吗?非常感谢。名称预计持续时间权重s002_run1_ag 116.761 2 1 s002_run1_ag 128.755 2 1 s002_run1_ag 138.763 2 1 s002_run1_ag 178.762 2 1 s002_run1_ag 190.771 2 1 1 s002_run1_ag 226.75 2 1 s002_ag 304.764 2 1 s002_run1_ag 360.759 2 1 s002_run1_ag 374.77 2 1_run1 404; 1.761