我必须将一个文本文件 - 大约600MB - 分成许多较小的文件,每个文件都有一个唯一的名称。
在主文件中,我有一个标签(比如version: '3'
services:
db:
image: postgres:9.6-alpine
volumes:
- data:/var/lib/postgresql/data
ports:
- 5432:5432
web:
image: python:3.6-alpine
command: ./waitforit.sh solr:8983 db:5432 -- bash -c "./init.sh"
build: .
env_file: ./.env
volumes:
- .:/sark
- solrcores:/solr
ports:
- 8000:8000
links:
- db
- solr
restart: always
solr:
image: solr:6-alpine
ports:
- 8983:8983
entrypoint:
- docker-entrypoint.sh
- solr-precreate
- sark
volumes:
- solrcores:/opt/solr/server/solr/mycores
volumes:
data:
solrcores:
),它在整个文件中重复出现。我必须制作其中六个标签并将它们放在较小的文本文件中。
代码:我无法生成多个测试文件,因为我的代码不正确。
FROM python:3
# Some stuff that everyone has been copy-pasting
# since the dawn of time.
ENV PYTHONUNBUFFERED 1
# Install some necessary things.
RUN apt-get update
RUN apt-get install -y swig libssl-dev dpkg-dev netcat
# Copy all our files into the image.
RUN mkdir /sark
WORKDIR /sark
COPY . /sark/
# Install our requirements.
RUN pip install -U pip
RUN pip install -Ur requirements.txt
答案 0 :(得分:-1)
您的代码中有许多完全不正确的内容。
所以我在这里写的是:
#!/usr/bin/perl
# Split a large file into files named by the latest <Name>...</Name> tag read.
use strict;
my $infile = $ARGV[0];
my $outprefix = $ARGV[1];
die("USAGE: $0 inputfile.xml out-prefix-") unless $outprefix;
my $name = "noname"; # current name to add to $outprefix
my $infh; # input file handle
my $outfh; # output file handle
my $line; # line being read
die("Cannot open input file \"$infile\" : $!")
unless open($infh, "<$infile");
while( defined($line=<$infh>) ){
if( $line =~ m!^<Name>([^<>]+)</Name>!i ){
$name = lc($1);
$name =~ s/[^\w.]+/-/g;
$name =~ s/^-//;
$name =~ s/-$//;
$name = "noname" unless $name;
# Close output of previous name :
if( $outfh ){
close($outfh);
undef $outfh;
}
}
unless( $outfh ){
die("Cannot open output file \"$outprefix$name\" : $!")
unless open($outfh, ">>$outprefix$name");
print("Now writing to $outprefix$name ...\n");
}
print($outfh $line);
}
close($outfh) if $outfh;
close($infh);
print("DONE.\n");
不要忘记我们在第一个标记之前不知道文件名,所以如果你想要包含之前的内容(换句话说,之前拆分),你将不得不缓冲这些行在写一个变量之前。