PoshCode Archive  Hex Artifact Content

Artifact 3eef28a80cc59f50591e3ac86945ce8f80eeb163198dfe36db29cc3d0f39d8de:

  • File Split.ps1 — part of check-in [f6f37927be] at 2018-06-10 13:18:24 on branch trunk — Split a file into smaller files. (user: tojo2000 size: 1634)

0000: 23 20 65 6e 63 6f 64 69 6e 67 3a 20 61 73 63 69  # encoding: asci
0010: 69 0d 0a 23 20 61 70 69 3a 20 70 6f 77 65 72 73  i..# api: powers
0020: 68 65 6c 6c 0d 0a 23 20 74 69 74 6c 65 3a 20 53  hell..# title: S
0030: 70 6c 69 74 0d 0a 23 20 64 65 73 63 72 69 70 74  plit..# descript
0040: 69 6f 6e 3a 20 53 70 6c 69 74 20 61 20 66 69 6c  ion: Split a fil
0050: 65 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20 66  e into smaller f
0060: 69 6c 65 73 2e 0d 0a 23 20 76 65 72 73 69 6f 6e  iles...# version
0070: 3a 20 30 2e 31 0d 0a 23 20 74 79 70 65 3a 20 66  : 0.1..# type: f
0080: 75 6e 63 74 69 6f 6e 0d 0a 23 20 61 75 74 68 6f  unction..# autho
0090: 72 3a 20 74 6f 6a 6f 32 30 30 30 0d 0a 23 20 6c  r: tojo2000..# l
00a0: 69 63 65 6e 73 65 3a 20 43 43 30 0d 0a 23 20 78  icense: CC0..# x
00b0: 2d 70 6f 73 68 63 6f 64 65 2d 69 64 3a 20 32 39  -poshcode-id: 29
00c0: 39 33 0d 0a 23 20 78 2d 61 72 63 68 69 76 65 64  93..# x-archived
00d0: 3a 20 32 30 31 32 2d 30 32 2d 30 35 54 30 35 3a  : 2012-02-05T05:
00e0: 32 31 3a 31 36 0d 0a 23 20 78 2d 70 75 62 6c 69  21:16..# x-publi
00f0: 73 68 65 64 3a 20 32 30 31 32 2d 31 30 2d 30 38  shed: 2012-10-08
0100: 54 31 30 3a 35 37 3a 30 30 0d 0a 23 0d 0a 23 0d  T10:57:00..#..#.
0110: 0a 66 75 6e 63 74 69 6f 6e 20 53 70 6c 69 74 20  .function Split 
0120: 7b 0d 0a 3c 23 0d 0a 2e 53 79 6e 6f 70 73 69 73  {..<#...Synopsis
0130: 0d 0a 53 70 6c 69 74 73 20 75 70 20 61 20 66 69  ..Splits up a fi
0140: 6c 65 20 69 6e 74 6f 20 73 6d 61 6c 6c 65 72 20  le into smaller 
0150: 66 69 6c 65 73 2e 0d 0a 2e 44 65 73 63 72 69 70  files....Descrip
0160: 74 69 6f 6e 0d 0a 54 68 69 73 20 66 75 6e 63 74  tion..This funct
0170: 69 6f 6e 20 74 61 6b 65 73 20 61 20 66 69 6c 65  ion takes a file
0180: 20 61 73 20 69 6e 70 75 74 20 61 6e 64 20 73 70   as input and sp
0190: 6c 69 74 73 20 69 74 20 69 6e 74 6f 20 66 69 6c  lits it into fil
01a0: 65 73 20 62 79 20 61 20 73 65 74 20 6e 75 6d 62  es by a set numb
01b0: 65 72 20 6f 66 0d 0a 6c 69 6e 65 73 2e 0d 0a 2e  er of..lines....
01c0: 50 61 72 61 6d 65 74 65 72 20 66 69 6c 65 6e 61  Parameter filena
01d0: 6d 65 0d 0a 54 68 65 20 6e 61 6d 65 20 6f 66 20  me..The name of 
01e0: 74 68 65 20 66 69 6c 65 20 74 6f 20 62 65 20 75  the file to be u
01f0: 73 65 64 20 61 73 20 61 6e 20 69 6e 70 75 74 2e  sed as an input.
0200: 0d 0a 54 68 69 73 20 76 61 6c 75 65 20 63 61 6e  ..This value can
0210: 20 62 65 20 70 69 70 65 64 20 74 6f 20 74 68 65   be piped to the
0220: 20 66 75 6e 63 74 69 6f 6e 20 28 73 65 65 20 65   function (see e
0230: 78 61 6d 70 6c 65 73 29 0d 0a 2e 50 61 72 61 6d  xamples)...Param
0240: 65 74 65 72 20 6c 69 6e 65 73 0d 0a 54 68 65 20  eter lines..The 
0250: 6e 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 20  number of lines 
0260: 70 65 72 20 66 69 6c 65 2e 0d 0a 2e 50 61 72 61  per file....Para
0270: 6d 65 74 65 72 20 70 72 65 66 69 78 0d 0a 41 20  meter prefix..A 
0280: 70 72 65 66 69 78 20 66 6f 72 20 74 68 65 20 6f  prefix for the o
0290: 75 74 70 75 74 20 66 69 6c 65 6e 61 6d 65 73 2e  utput filenames.
02a0: 20 20 44 65 66 61 75 6c 74 73 20 74 6f 20 27 73    Defaults to 's
02b0: 70 6c 69 74 2e 27 0d 0a 2e 50 61 72 61 6d 65 74  plit.'...Paramet
02c0: 65 72 20 65 78 74 65 6e 73 69 6f 6e 0d 0a 54 68  er extension..Th
02d0: 65 20 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e  e file extension
02e0: 20 74 6f 20 75 73 65 20 66 6f 72 20 6f 75 74 70   to use for outp
02f0: 75 74 20 66 69 6c 65 73 2e 0d 0a 2e 45 78 61 6d  ut files....Exam
0300: 70 6c 65 0d 0a 23 20 53 69 6d 70 6c 65 20 73 70  ple..# Simple sp
0310: 6c 69 74 20 6f 66 20 61 20 66 69 6c 65 2e 0d 0a  lit of a file...
0320: 53 70 6c 69 74 20 2d 66 69 6c 65 6e 61 6d 65 20  Split -filename 
0330: 6d 79 62 69 67 66 69 6c 65 2e 74 78 74 20 2d 6c  mybigfile.txt -l
0340: 69 6e 65 73 20 31 30 30 0d 0a 2e 45 78 61 6d 70  ines 100...Examp
0350: 6c 65 0d 0a 23 20 50 61 73 73 20 61 20 6e 75 6d  le..# Pass a num
0360: 62 65 72 20 6f 66 20 66 69 6c 65 73 20 62 79 20  ber of files by 
0370: 70 69 70 65 6c 69 6e 65 2c 20 66 69 6c 74 65 72  pipeline, filter
0380: 69 6e 67 20 6f 75 74 20 64 69 72 65 63 74 6f 72  ing out director
0390: 69 65 73 0d 0a 6c 73 20 7c 20 3f 7b 2d 6e 6f 74  ies..ls | ?{-not
03a0: 20 24 5f 2e 50 53 49 73 43 6f 6e 74 61 69 6e 65   $_.PSIsContaine
03b0: 72 7d 20 7c 20 25 7b 24 5f 2e 46 75 6c 6c 4e 61  r} | %{$_.FullNa
03c0: 6d 65 7d 20 7c 20 53 70 6c 69 74 20 2d 6c 69 6e  me} | Split -lin
03d0: 65 73 20 31 30 30 0d 0a 23 3e 0d 0a 20 20 70 61  es 100..#>..  pa
03e0: 72 61 6d 28 5b 50 61 72 61 6d 65 74 65 72 28 4d  ram([Parameter(M
03f0: 61 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 2c 0d  andatory=$true,.
0400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0410: 20 20 20 20 56 61 6c 75 65 46 72 6f 6d 50 69 70      ValueFromPip
0420: 65 4c 69 6e 65 3d 24 74 72 75 65 29 5d 0d 0a 20  eLine=$true)].. 
0430: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 5d 24         [string]$
0440: 66 69 6c 65 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  filename,..     
0450: 20 20 20 5b 50 61 72 61 6d 65 74 65 72 28 4d 61     [Parameter(Ma
0460: 6e 64 61 74 6f 72 79 3d 24 74 72 75 65 29 5d 0d  ndatory=$true)].
0470: 0a 20 20 20 20 20 20 20 20 5b 69 6e 74 5d 24 6c  .        [int]$l
0480: 69 6e 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 5b  ines,..        [
0490: 50 61 72 61 6d 65 74 65 72 28 4d 61 6e 64 61 74  Parameter(Mandat
04a0: 6f 72 79 3d 24 66 61 6c 73 65 29 5d 0d 0a 20 20  ory=$false)]..  
04b0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 5d 24 70        [string]$p
04c0: 72 65 66 69 78 20 3d 20 27 73 70 6c 69 74 2e 27  refix = 'split.'
04d0: 2c 0d 0a 20 20 20 20 20 20 20 20 5b 50 61 72 61  ,..        [Para
04e0: 6d 65 74 65 72 28 4d 61 6e 64 61 74 6f 72 79 3d  meter(Mandatory=
04f0: 24 66 61 6c 73 65 29 5d 0d 0a 20 20 20 20 20 20  $false)]..      
0500: 20 20 5b 73 74 72 69 6e 67 5d 24 65 78 74 65 6e    [string]$exten
0510: 73 69 6f 6e 20 3d 20 27 74 78 74 27 29 0d 0a 20  sion = 'txt').. 
0520: 20 20 20 20 20 20 20 0d 0a 20 20 69 66 20 28 2d         ..  if (-
0530: 6e 6f 74 20 28 54 65 73 74 2d 50 61 74 68 20 24  not (Test-Path $
0540: 66 69 6c 65 29 29 20 7b 0d 0a 20 20 20 20 57 72  file)) {..    Wr
0550: 69 74 65 2d 48 6f 73 74 20 22 24 66 69 6c 65 20  ite-Host "$file 
0560: 6e 6f 74 20 66 6f 75 6e 64 21 22 0d 0a 20 20 20  not found!"..   
0570: 20 62 72 65 61 6b 0d 0a 20 20 7d 0d 0a 20 20 0d   break..  }..  .
0580: 0a 20 20 24 69 6e 63 72 65 6d 65 6e 74 20 3d 20  .  $increment = 
0590: 30 0d 0a 20 20 24 6c 69 6e 65 20 3d 20 30 0d 0a  0..  $line = 0..
05a0: 20 20 0d 0a 20 20 47 65 74 2d 43 6f 6e 74 65 6e    ..  Get-Conten
05b0: 74 20 24 66 69 6c 65 20 7c 0d 0a 20 20 20 20 25  t $file |..    %
05c0: 7b 0d 0a 20 20 20 20 20 20 24 6c 69 6e 65 20 2b  {..      $line +
05d0: 3d 20 31 0d 0a 20 20 20 20 20 20 0d 0a 20 20 20  = 1..      ..   
05e0: 20 20 20 69 66 20 28 2d 6e 6f 74 20 28 24 6c 69     if (-not ($li
05f0: 6e 65 73 20 25 20 24 6c 69 6e 65 29 29 20 7b 0d  nes % $line)) {.
0600: 0a 20 20 20 20 20 20 20 20 24 69 6e 63 72 65 6d  .        $increm
0610: 65 6e 74 20 2b 3d 20 31 0d 0a 20 20 20 20 20 20  ent += 1..      
0620: 7d 0d 0a 20 20 20 20 20 20 0d 0a 20 20 20 20 20  }..      ..     
0630: 20 24 5f 20 3e 3e 20 22 24 66 69 6c 65 2e 24 69   $_ >> "$file.$i
0640: 6e 63 72 65 6d 65 6e 74 2e 24 65 78 74 65 6e 73  ncrement.$extens
0650: 69 6f 6e 22 0d 0a 20 20 20 20 7d 20 20 0d 0a 7d  ion"..    }  ..}
0660: 0d 0a                                            ..