Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在csv中复制连续和跳过n行?_Csv_Sorting_Cmd_Skip - Fatal编程技术网

如何在csv中复制连续和跳过n行?

如何在csv中复制连续和跳过n行?,csv,sorting,cmd,skip,Csv,Sorting,Cmd,Skip,我每年都有csv文件,f.I.hourdata-2019.csv, 看起来是这样的: date,hour,temp 20181231,24,75 20190101,1,76 20190101,2,76 20190101,3,75 20190101,4,76 20190101,5,74 ......etc 我想做的是创建一个新文件,其中包含两行连续的块,然后跳过一些行。 F.I.我想知道一年中每9小时一小时的温度差,因此如果我跳过7行,新文件应该如下所示: 20190101,1,76 20190

我每年都有csv文件,f.I.hourdata-2019.csv, 看起来是这样的:

date,hour,temp
20181231,24,75
20190101,1,76
20190101,2,76
20190101,3,75
20190101,4,76
20190101,5,74
......etc
我想做的是创建一个新文件,其中包含两行连续的块,然后跳过一些行。 F.I.我想知道一年中每9小时一小时的温度差,因此如果我跳过7行,新文件应该如下所示:

20190101,1,76
20190101,2,76
20190101,10,57
20190101,11,60
20190101,19,61
20190101,20,56
.........etc
我最初希望可以使用OpenOffice或LibreOffice calc模块,但只能找到类似的解决方案 还有一些面向对象的宏,我无法适应我的需要。 然后我想它可能更适合cmd脚本,但我也找不到一个合适的例子。 我所能做的是在calc中列出我想要的行,并借助于: =间接(地址($L$1,K3,1,,“表1”)) 当l1=1和k3=3时,应得到表1.C1,并为我解出它

我将使用R:

setwd(dir = "c:/...")                       # set working directory.
d <- read.csv("hourdata-2019.csv")          # read your datafile
rows <- c(2, 3, ...)                        # define the rows as needed, can be a formula
d[rows, ]                                   # will give you the modified dataset
write.csv(x = d, file = "hourdata-2019 out.csv")
设置工作目录。
很好的挑战。这是一个纯批量解决方案:

@echo off
setlocal enabledelayedexpansion

REM following code to produce some data for testing:
(
echo date,hour,temp
echo 20181231,24,99
for /l %%a in (1,1,9) do @for /l %%b in (1,1,24) do @echo 2019010%%a,%%b,!random:~-2!
for /l %%a in (1,1,9) do @for /l %%b in (1,1,24) do @echo 2019011%%a,%%b,!random:~-2!
for /l %%a in (1,1,9) do @for /l %%b in (1,1,24) do @echo 2019012%%a,%%b,!random:~-2!
)>hourdata-test.csv


REM code to extract desired values
REM expected hour-pairs: 1,2 - 10,11 - 19,20 - 4,5 - 13,14 - 22,23 - 7,8 - 16,17 : repeat

(for /f "tokens=1,* delims=:" %%a in ('findstr /n "^" hourdata-test.csv') do (
  set /a "x=%%a %% 9"
  if !x! == 3 echo %%b
  if !x! == 4 echo %%b
))>ninerdata.csv
诀窍是使用行号,计算模9,然后简单地比较结果值。跳过前两行是通过打印模数3和4来实现的


一整年的数据应该不超过2秒。

欢迎使用Stackoverflow。如果你澄清:你希望如何实现这一点,你可能会得到更好的答案。i、 在Excel中,或以编程方式(编程也是如此),使用哪种语言。。。?你到底想做什么?我不太明白该保留/跳过哪些行。你的问题是什么,到目前为止你尝试了什么,出了什么问题?例如,在R中寻址数据帧行?你能举一个WWWorking的例子吗?在你的Q中,似乎你只保留了第2、3、n1、n2行(n1和n2不是“整个”数据集的一部分)。这听起来像是一个数据库应用程序。将.csv文件加载到数据库(任何数据库)中,并对其编写SQL。对于cmd.exe.bat文件脚本,我认为这不是一个好的应用程序。