我有一个大问题。我用测量程序进行了很多测量。我得到几个* .SP8文件,它们只不过是文本文件。使用Automator,我可以重命名所有* .csv。
我现在需要一个清除我前29行内容的脚本。然后脚本必须用分号替换所有空格。
脚本必须在所有子文件夹中的指定文件夹中找到所有csv文件。
理想情况下,它会在一行中找到第一个空格,并用分号替换它,并清除行中的其余部分。
文件看起来像:
Test
22.01.2016
..
Tester
20160122_BM_BLANK
User
20160122_BM_BLANK
Text
@@6.000 5.350 1.000 12.000 8.500 1020.000 60.000 940.000 4.773 0.000 1.500 14.800 0.000 100.000 0.000 9.000 0
@@SWB 533 [blank]
blank
SK 999100.10
no
100Nm.SEN
100 Nm
Last 01/2013
SN: "HBM,Spider8-55/01,08231,P32"
1200
7200
0 -0.015238 0 -0.0465 0
0 -0.015238 0 -0.0465 0.000833
0 -0.025 0 -0.0465 0.001667
... following 6000 lines of code like this ...
384.5 -0.025 0 -0.0465 5.9975
384.5 -0.025 0 -0.0465 5.998333
384.5 -0.025 0 -0.0465 5.999166
End
这应该变成这个:
0;-0.015238
0;-0.015238
0;-0.025
... following 6000 lines of code like this ...
384.5;-0.025
384.5;-0.025
384.5;-0.025
目标是在EXCEL中加载它并创建图形
答案 0 :(得分:1)
tail
和sed
:
tail -n +30 file | sed 's/^\([^ ]*\) \+\([^ ]* \).*/\1;\2/;/^$/{N;/End/d}'
tail
删除前29行。
sed
搜索并捕获以非空格字符开头的字符串,后跟一个或多个空格,后跟非空格字符后跟一个空格。两个捕获的组之间都输出;
。
/^$/{N;/End/d}
删除了End
行。
以递归方式将上述命令应用于从当前目录开始的所有.csv文件:
find . -name "*.csv" -print0 -exec sh -c 'tail -n +30 {} | sed "s/^\([^ ]*\) \+\([^ ]* \).*/\1;\2/;/^$/{N;/End/d}" > {}.new' \;
所有过程文件都将以.new
扩展名为后缀。
答案 1 :(得分:1)
使用JREPL.BAT regular expression find/replace utility,一个纯脚本实用程序(混合JScript /批处理),可以在XP以后的任何Windows机器上本机运行:
@echo off
pushd "yourRootPath"
for /f "eol=: delims=" %%F in (
'findstr /smc:" " *.csv'
) do call jrepl " +" ";" /a /jbegln "skip=(ln<30)" /f "%%F" /o -
popd
FINDSTR命令查找并列出包含空格的所有.CSV文件(已转换的文件将不再有空格)。
FOR / F命令迭代每个结果文件。
JREPL.BAT完成剩下的工作
;
/a
仅打印更改的行/jbegln ...
忽略前29行/f "%%F"
指定源文件/o -
使用结果从JREPL v4.0开始,可以通过/EXC
选项忽略前29行,而不是通过/JBEGLN
选项使用用户提供的JScript。
) do call jrepl " +" ";" /a /exc 1:29 /f "%%F" /o -
另外,我刚刚意识到OP只想保留每行的前2个值,而我的原始代码保留了所有值。对find / repl字符串的简单更改应该可以解决问题:
) do call jrepl " +([^ ]+)" ";$1" /a /exc 1:29 /f "%%F" /o -
答案 2 :(得分:1)
我编写了这个完美完成工作的php脚本:
<?php
$base = "BM_BLANK_";
for ($i = 1; $i <= 1; $i++) {
$myfile = fopen($base.$i.".txt", "r") or die("Kann Datei nicht öffnen!");
$arr = explode(PHP_EOL, substr(strstr(fread($myfile, filesize($base.$i.".txt")),"1200"),12,-8));
foreach($arr as $key => $value) {
$new[$key] = explode(" ", $value);
unset($new[$key][2]);
unset($new[$key][3]);
unset($new[$key][4]);
}
$newfile = fopen($i.".csv", "w");
$txt = "";
foreach($new as $sch => $wert) {
$txt .= $wert[0].";".$wert[1]."\n";
}
fwrite($newfile, $txt);
fclose($newfile);
fclose($myfile);
}
?>