【问题标题】:extracting multiple line of a text file into a new text file将文本文件的多行提取到新的文本文件中
【发布时间】:2014-03-06 15:51:40
【问题描述】:

可以为我的问题制作一个批处理文件吗?

我需要提取多行内容的文本文件 这是批处理文件的场景。

我有一个文件名为 13051710_140211094000.txt 的 txt 文件

该文件的内容是:

14/02/11 09:20:00; 982.8; 15; 17; 18;
14/02/11 09:30:00; 983.0; 16; 18; 21; 1; 100; 158; 54; 131; 174; 
14/02/11 09:40:00; 983.1; 20; 21; 22; 0; 100; 127; 60; 
14/02/11 09:50:00; 983.1; 19; 20; 22; 0; 100; 149; 86; 
14/02/11 10:00:00; 983.2; 19; 20; 21; 0; 100; 151; 

我需要将每一行提取到一个新的 txt 文件中。 新的文本文件应该从每一行获取时间戳并将其转换为文件名。

新建的文本文件应该是这样的

MYDATA_140211092000.txt

该文件的内容是:

14/02/11 09:20:00; 982.8; 15; 17; 18;

并且应该使用该规则从主内容的下一行创建另一个文件。

感谢和问候

【问题讨论】:

  • MYDATA 的字面意思是“MYDATA”还是提取行的那一部分?
  • MYDATA 字面意思是 MYDATA ,不是要提取的数据的一部分

标签: file batch-file text


【解决方案1】:
for /f "usebackq tokens=1-6,* delims=/:; " %%a in ("13051710_140211094000.txt") do (
    >>"MYDATA_%%a%%b%%c%%d%%e%%f.txt" echo(%%a/%%b/%%c %%d:%%e:%%f; %%g
)

【讨论】:

    【解决方案2】:
    @ECHO OFF
    SETLOCAL
    FOR /L %%t IN (0,1,9) DO FOR %%u IN (%%t*_*.txt) DO (
     FOR /f "delims=" %%q IN (%%u) DO (
      FOR /f "tokens=1-6delims=/:; " %%a IN ("%%q") DO (
      >>MYDATA_%%a%%b%%c%%d%%e%%f.txt ECHO(%%q
      )
     )
    )
    GOTO :EOF
    

    作为一个 Windows .cmd 批处理脚本 - 你还没有明确说明。

    (修订版,假设目标文件以n*_*.txt 格式命名,n 数字。)

    【讨论】:

    • 这个批处理脚本对我有用,感谢您的帮助。但是有一点我忘了解释,如果我有多个该类型的文本文件,例如我在同一个文件夹中有三个 txt 文件,13051710_140211094000.txt 13051710_140211095000.txt 13051710_140211096000.txt
    • 编辑版对我有用,太好了!非常感谢。另一种情况,如果我提到我想要字符 13051710 作为我识别文件的主密钥怎么办。实际上这是我的设备的序列号。如果我在同一文件夹中有来自另一个设备的另一个文件,例如 12051711_timestamp,这可能会很有用,因为您可以看到我的示例文件在 _ 字符之后跟随时间戳。
    【解决方案3】:
    #!/bin/bash
    
    while IFS= read -r line; do
    datestamp=$(echo $line | cut -f 1 -d " ");
    day=$(echo $datestamp |cut -f 1 -d "/")
    month=$(echo $datestamp |cut -f 2 -d "/")
    year=$(echo $datestamp |cut -f 3 -d "/")
    
    timestamp=$(echo $line | cut -f 2 -d " " | cut -f 1 -d ";")
    hour=$(echo $timestamp |cut -f 1 -d ":")
    min=$(echo $timestamp |cut -f 2 -d ":")
    sec=$(echo $timestamp |cut -f 3 -d ":")
    
    echo $line > MYDATA_$day$month$year$hour$min$sec.txt
    done < file.txt
    

    将最后一行中的 file.txt 更改为您的主文件名

    【讨论】:

    • 我认为他需要批处理而不是 bash 文件 :)
    猜你喜欢
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多