我需要使用Unix通过文件的第一个标签分割文件。
原始文件如下:
TAG ANIMAL
A CAT
B CAT
C CAT
D DOG
A DOG
结果文件应如下所示(拆分后):
文件1
TAG ANIMAL
A CAT
A DOG
文件2
TAG ANIMAL
B CAT
文件3
TAG ANIMAL
C CAT
文件4
TAG ANIMAL
D DOG
尝试: 我尝试了split -p一个文件名前缀,但这仅适用于排序的数据,因此CAT和DOG最终位于不同的文件中。我还从中得到了3个其他随机文件,它们是不需要的。
答案 0 :(得分:1)
这种awk单线可为您提供帮助:
awk 'NR==1{t=$0;next}!a[$1]{print t>$1}{print >>$1;a[$1]=1;close($1)}' file
如果我们用您的示例进行测试,则在执行awk cmd之后,您将获得A,B,C,D
四个文件。
kent$ cat f
TAG ANIMAL
A CAT
B CAT
C CAT
D DOG
A DOG
kent$ awk 'NR==1{t=$0;next}!a[$1]{print t>$1}{print >>$1;a[$1]=1;close($1)}' f
kent$ head {A..D}
==> A <==
TAG ANIMAL
A CAT
A DOG
==> B <==
TAG ANIMAL
B CAT
==> C <==
TAG ANIMAL
C CAT
==> D <==
TAG ANIMAL
D DOG
答案 1 :(得分:0)
尝试一下。
split [options] filename prefix
it will split your file in unix
答案 2 :(得分:0)
您可以在Python中通过创建如下的split_file.py
脚本来完成此操作:
original_file = open('original_file.txt', 'r')
file_contents = []
for line in original_file:
file_contents.append(line.split())
tags = {c[0] for c in file_contents[1:]}
for tag in tags:
file_name = 'file_{}.txt'.format(tag)
new_file = open(file_name, 'w')
new_file.write('{} {}\n'.format(file_contents[0][0], file_contents[0][1]))
for content in file_contents:
if content[0] == tag:
new_file.write('{} {}\n'.format(content[0], content[1]))
new_file.close()
此脚本假定您的原始文件名为original_file.txt
,它将创建名为file_<tag name>.txt
的新文件。
您可以致电
python split_file.py
执行它。