【问题标题】:How to split a text file on a delimiter into multiple files in unix?如何将分隔符上的文本文件拆分为unix中的多个文件?
【发布时间】:2014-08-30 15:53:28
【问题描述】:

我有一个如下所示的文本文件:

输入文件

1|abc
2|def
3|ghi
n|etc...

我需要在管道分隔符上将其拆分为两个文件。所以这是预期的输出:

文件_1:

1
2
3
n

文件_2:

abc
def
ghi
etc

我不知道输入文件会有多少行。您如何在 ksh 或 bash 中实现这一点?

谢谢。

【问题讨论】:

    标签: bash unix text split ksh


    【解决方案1】:

    awk 适合这个任务:

    awk -F\| '{print $1 > "File_1"; print $2 > "File_2"}' input_file
    

    这会将您的文本拆分为“|”并将每一列打印到相应的文件中。

    如果有两个以上的字段,您可能更喜欢使用循环:

    awk -F\| '{for(i=1;i<=NF;++i) print $i > "File_" i}' input_file
    

    【讨论】:

      【解决方案2】:
      cut -d '|' -f 1 input_file > File_1
      cut -d '|' -f 2 input_file > File_2
      

      仅适用于 bash:

      while IFS='|' read A B; do echo "$A" >>File_1; echo "$B" >>File_2; done <input_file
      

      【讨论】:

        【解决方案3】:

        这是使用其他 bash 命令的另一种解决方案

        cat input_file | cut -d '|' -f1 > File_1
        cat input_file | cut -d '|' -f2 > File_2
        

        或者你可以把它们放在一行中

        cat input_file | tee >(cut -d '|' -f1 > File_1) | cut -d '|' -f2 > File_2
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-07
          • 2012-07-04
          • 2014-08-24
          • 2016-08-01
          • 1970-01-01
          • 2013-04-22
          相关资源
          最近更新 更多