Powershell Header Record - powershell
I have a scenario like below:
I have a .dat file where header field name which is coming as below example:
2_a 2_b 2_c 2_d 2_e - Header
a b c d e - Data
f g h I j - Trailer
Next time
1_a 1_b 1_c 1_d 1_e -Header
c d e f g -data
b d f j k - trailer
So I want to achieve like my header record number is dynamically changing. Is there any way that I can achieve it so that I will just put the value and it will pick that value before that...like if I will input value 3 the header record will become 3_a 3_b like that....
After that my data will come and then trailer...Please suggest me the process as I am new to powershell...
If you want to create a line like
2_a 2_b 2_c 2_d 2_e
or
1_a 1_b 1_c 1_d 1_e
dynamically, you could use the string format operator, -f, like this
$index = 2
$header = "{0}_a {0}_b {0}_c {0}_d {0}_e" -f $index
this will create the first header and save it to a variable. Change the $index variable to create another string with some other number instead.
See this link for more info on its usage.
Related
Matlab: Read a certain file and make a calculation on columns
I have file names go on 2.txt 4.txt 8.txt 12.txt 14.txt. And each file structure looks like I want to read each designated file and do some calculations with the designated columns for instance, after calling 2.txt file I want to calculate column(A)+column(I) The questions How can I call the certain file with their name How can I do calculations with this file columns Here is my code function[t]=ad(x) folderName='C:\Users\zeldagrey6\Desktop\AD'; fileinfo=dir([folderName filesep '**/*.txt'] ); filename={fileinfo.name}; fullFileName=[folderName filesep filename{x}]; d=readtable(fullFileName, 'ReadVariableNames', true); t=d.A+d.I; end The problems of the code When I put ad(2) into array i call 4.txt instead of 2.txt. I guess it does not care the names of the text just read them according to their sequence Is there any way to assign with each column like var1,var2 and do some calculations with var1+var2 instead of d.A+d.I
yes, you can refer to table contents with curly brackets like this: A = (30.1:0.1:30.5)'; I = (324:328)'; Angle = (35:5:55)'; FWHM = (0.2:0.05:0.4)'; d = table(A,I,Angle,FWHM); t1 = d.A + d.I; t2 = d{:,1} + d{:,2}; See that t1 and t2 are equal
Grouping file names in clusters
I am using this line to read all Images in a file: imagefiles = dir('Images\*.jpg'); Suppose I have the names: a1.jpg,a11.jpg,b13.JPG,b5.JPG,c1.jpg. How do I group together all images with no more than 2 different characters (the number) in their name. for the given example group together all a and all b and atheired group for c. By grouping I mean form some kind of data structure or order that will enable me to access each group separately for later processing? I am assuming the file type is always 'jpg' and the numbers will always be smaller then 100 and positive. I am assuming a not case sensitive code regarding file type, that is jpg and JPG may appear (I don't know regular expression but will be happy to learn from a good link as well)
You could capture the initial non-number part of the file name using regexp, group them with unique and put them in a struct. % Some test data files = {'a11','a1','b2','a32','ca3','b45','c1','ca2'}; files = strcat(files, '.jpg'); % Capture and group tag = regexp(files,'^\D+','match','once'); [unTag, ~, unIdx] = unique(tag); for idx = 1:length(unTag) fileGroups.(unTag{idx}) = files(unIdx == idx); end % The result >> fileGroups = a: {'a11.jpg' 'a1.jpg' 'a32.jpg'} b: {'b2.jpg' 'b45.jpg'} c: {'c1.jpg'} ca: {'ca3.jpg' 'ca2.jpg'} Depending on how your filenames you might have to update to a more detailed regular expression. You could use \D+(?=\d+\.(JPG|jpg)) to caputure a non-digit char before some number and the .jpg extension. So if your file names are something like: >> files 'dummyStr_a11.jpg' 'dummyStr_a1.jpg' 'dummyStr_b2.jpg' 'dummyStr_a32.jpg' 'dummyStr_ca3.jpg' 'dummyStr_b45.jpg' 'dummyStr_c1.jpg' 'dummyStr_ca2.jpg' Capture with something like tag = regexp(files,'[a-z]+(?=\d+\.(JPG|jpg))','match','once'); >> tag = 'a' 'a' 'b' 'a' 'ca' 'b' 'c' 'ca'
Extract specific column information from table in MATLAB
I have several *.txt files with 3 columns information, here just an example of one file: namecolumn1 namecolumn2 namecolumn3 #---------------------------------------- name1.jpg someinfo1 name name2.jpg someinfo2 name name3.jpg someinfo3 name othername1.bmp info1 othername othername2.bmp info2 othername othername3.bmp info3 othername I would like to extract from "namecolumn1" only the names starting with name but from column 1. My code look like this: file1 = fopen('test.txt','rb'); c = textscan(file1,'%s %s %s','Headerlines',2); tf = strcmp(c{3}, 'name'); info = c{1}{tf}; the problem is that when I do disp(info) I got only the first entry from the table: name1.jpg and I would like to have all of them: name1.jpg name2.jpg name3.jpg
You're pretty much there. What you're seeing is an example of MATLAB's Comma Separated List, so MATLAB is returning each value separately. You can verify this by entering c{1}{tf} in the command line after running your script, which returns: >> c{1}{tf} ans = name1.jpg ans = name2.jpg ans = name3.jpg Though sometimes we'd want to concatenate them, I think in the case of character arrays it is more difficult to work with than retaining the cell arrays: >> info = [c{1}{tf}] info = name1.jpgname2.jpgname3.jpg versus >> info = c{1}(tf) info = 'name1.jpg' 'name2.jpg' 'name3.jpg' The former would require you to reshape the result (and whitespace pad, if the strings are different lengths), whereas you can index the strings in a cell array directly without having to worry about any of that (e.g. info{1}).
Import csv file in Matlab
I need your help to import some csv files into matlab. They have the following format #CONTENT Class,Category,Level,Form xxxxx,xxxxx,1.0,1 #DATA_GENERATION Date,Agency,Version,ScientificAuthority 2010-04-08,INME,1.0,XXX xxx xxxx #PLATFORM Type,ID,Name,Country,GAW_ID STN,308,xxxx,xxx #INSTRUMENT Name,Model,Number ECC,6A,6A23500 #LOCATION Latitude,Longitude,Height 25,-3,631.0 #TIMESTAMP UTCOffset,Date,Time +00:00:00,2010-04-07,10:51:00 * SOFTWARE: SNDPRO 1.321 * TROPOPAUSE IN MB 184 * #FLIGHT_SUMMARY IntegratedO3,CorrectionCode,SondeTotalO3,CorrectionFactor,TotalO3,WLCode,ObsType,Instrument,Number 328.4,0,379.9 #AUXILIARY_DATA MeteoSonde,ib1,ib2,PumpRate,BackgroundCorr,SampleTemperatureType,MinutesGroundO3 RS92-SGPW,,,,Pressure,Pump #PUMP_CORRECTION Pressure,Correction 2.0,1.171 3.0,1.131 5.0,1.092 10.0,1.055 20.0,1.032 30.0,1.022 50.0,1.015 100.0,1.011 200.0,1.008 300.0,1.006 500.0,1.004 1000.0,1.000 #PROFILE Pressure,O3PartialPressure,Temperature,WindSpeed,WindDirection,LevelCode,Duration,GPHeight,RelativeHumidity,SampleTemperature 945.36,4.590,14.6,10.0,30,2,0,631,43,22.8 944.90,4.620,14.3,7.8,20,0,2,635,44,22.8 943.51,4.630,13.9,7.6,17,0,4,647,44,22.8 942.13,4.620,13.4,8.1,16,0,6,660,45,22.8 940.98,4.590,13.0,9.0,16,0,8,670,45,22.8 939.83,4.590,12.6,9.8,17,0,10,680,46,22.8 938.69,4.600,12.1,10.3,18,2,12,691,46,22.8 937.77,4.600,12.2,10.9,18,0,14,699,47,22.9 936.63,4.600,12.1,11.4,19,0,16,709,47,22.9 935.48,4.600,11.8,11.9,19,0,18,719,47,22.9 934.12,4.600,11.7,12.3,19,0,20,731,47,22.9 932.98,4.590,11.6,12.6,19,0,22,742,48,22.9 931.84,4.590,11.6,12.9,18,0,24,752,48,22.9 930.93,4.600,11.6,13.2,18,0,26,760,48,22.9 929.79,4.600,11.4,13.4,17,0,28,770,49,22.9 928.88,4.610,11.5,13.6,16,0,30,778,49,22.9 927.98,4.620,11.4,13.7,15,0,32,787,49,23.0 927.30,4.620,11.3,13.8,14,0,34,793,49,23.0 The first line of the file is empty and second line contains the #CONTENT. I would like to have in a matrix all data that are under the line Pressure,O3PartialPressure,Temperature,WindSpeed,WindDirection,LevelCode,Duration,GPHeight,RelativeHumidity,SampleTemperature
Use the csvread() function. From the documentation: csvread Read a comma separated value file. M = csvread('FILENAME') reads a comma separated value formatted file FILENAME. The result is returned in M. The file can only contain numeric values. In your case, since you want to exclude all of the content up until the #PROFILE data, you would have to know the line number of the data you're interested in in advance, then use one of the following uses (again from the documentation): M = csvread('FILENAME',R,C) reads data from the comma separated value formatted file starting at row R and column C. R and C are zero- based so that R=0 and C=0 specifies the first value in the file. M = csvread('FILENAME',R,C,RNG) reads only the range specified by RNG = [R1 C1 R2 C2] where (R1,C1) is the upper-left corner of the data to be read and (R2,C2) is the lower-right corner. RNG can also be specified using spreadsheet notation as in RNG = 'A1..B7'.
Matlab: finding/writing data from mutliple files by column header text
I have an array which I read into Matlab with importdata. It has 5 header lines file = 'aoao.csv'; s = importdata(file,',', 5); Matlab automatically treats the last line as the column header. I can then call up the column number that I want with s.data(:,n); %n is desired column number I want to be able to load up many similar files at once, and then call up the columns in the different files which have the same column header name (which are not necessarily the same column number). I want to be able to write and export all of these columns together into a new matrix, preferably with each column labelled with its file name, what should I do?
samp = 'len-c.mp3'; %# define desired sample/column header name file = dir('*.csv'); have the directory ready in main screen current folder. This creates a detailed description of file, for i=1:length(file) set(i) = importdata(file(i).name,',', 5); end this imports the data from each of the files (comma delimited, 5 header lines) and transports it to a cell array called 'set' for k = 1:14; for i=1:length(set(k).colheaders) TF = strcmp(set(k).colheaders(i),samp); %compares strings for match if TF == 1; %if match is true group(:,k) = set(k).data(:,i); %save matching column# to 'group' end end end this retrieves the data from the named colheader within each file