1: #----------------------------------------------------------------
2: # Head.ps1
3: #----------------------------------------------------------------
4: param
5: (
6: [string]$filespec = $null,
7: [int]$num_bytes = -1,
8: [int]$num_lines = -1,
9: [bool]$quiet = $false
10: );
11:
12: function Do-Head()
13: {
14: param
15: (
16: [string]$filespec = $null,
17: [int]$num_bytes = -1,
18: [int]$num_lines = -1
19: );
20:
21: # if no bytes or lines specified, default to 10 lines
22: if ( (-1 -eq $num_bytes) -and (-1 -eq $num_lines) ) { $num_lines = 10; }
23:
24: [System.IO.FileInfo[]]$files = Get-ChildItem $filespec;
25: foreach ($file in $files)
26: {
27: $cur_bytes = 0;
28: if ( ($files.Length -gt 1) -and ($false -eq $quiet) )
29: {
30: "";
31: "==> $($file.Name) <==";
32: }
33:
34: [string[]]$lines = Get-Content $file -TotalCount $num_lines;
35: for ($i=0; $i -lt $lines.Length; $i++)
36: {
37: $line = $lines[$i];
38: if ( -1 -ne $num_lines )
39: {
40: # -1 means all lines
41: $line;
42: }
43: elseif ( -1 -ne $num_bytes )
44: {
45: if ( ($cur_bytes + $line.Length) -le $num_bytes )
46: {
47: $line;
48: $cur_bytes += $line.Length;
49: }
50: else
51: {
52: $line.SubString(0, $num_bytes - $cur_bytes);
53: $cur_bytes = $num_bytes;
54: break;
55: }
56: }
57: }
58: }
59: }
60:
61:
62: Do-Head -filespec $filespec -num_bytes $num_bytes -num_lines $num_lines -quiet $quiet