【问题标题】:split a file into segments?将文件分割成段?
【发布时间】:2009-09-02 12:44:13
【问题描述】:

我有一个包含由 分号“;” 分隔的文本数据的文件。我想分离数据,换句话说,在 ; 发生的地方分割并将数据写入输出文件。 bash脚本有什么办法吗?

【问题讨论】:

    标签: bash file text split


    【解决方案1】:

    您很可能希望 awk 将 FS(字段分隔变量)设置为 ';'

    Awk 是基于列的数据的首选工具(有些人喜欢 Perl,但我不喜欢)。

    echo '1;2;3;4;5
    6;7;8;9;10' | awk -F\; '{print $3" "$5}'
    

    输出:

    3 5
    8 10
    

    如果你只是想把分号变成换行符:

    echo '1;2;3;4;5
    6;7;8;9;10' | sed 's/;/\n/g'
    

    在不同的行上输出数字 1 到 10。

    显然这些命令只是使用我的测试数据。如果您想在自己的文件中使用它们,请使用以下内容:

    sed 's/;/\n/g' <input_file >output_file
    

    【讨论】:

      【解决方案2】:
      #!/bin/bash
      
      while read -d ';' ITEM; do
          echo "$ITEM"
      done
      

      【讨论】:

      • 据我所知,这是单独使用 bash 的唯一有效方法;即不求助于使用外部程序进行解析。
      【解决方案3】:

      试试:

      cat original_file.txt | cut -d";" -f1 > new_file.txt
      

      这会将每一行拆分为由“;”分隔的字段并选择第一个字段 (-f1)。 您可以使用 -f1、-f2、... 访问其他字段,也可以使用 -f1-2、-f2- 访问多个字段。

      【讨论】:

      • 不需要猫。剪切 -d ";" -f1 org_file.txt > 新文件
      • 剪切多个字段将分隔符留在它们之间。
      【解决方案4】:

      您可以通过 'tr' 命令将一个字符转换为另一个字符。

      猫输入.txt | tr';' '\n' > output.txt

      \n 是新行,如果您只想要一个选项卡,则应将其替换为 \t

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-15
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多