使用awk拆分大文件

时间:2017-03-14 15:10:37

标签: ubuntu awk

我有一个大文件,我需要使用第6列唯一值进行拆分,但列之间用〜

分隔

我怎样才能使用" awk"在Ubuntu中执行命令。?我的文本文件很大,有超过400,000行。

提前致谢。

    2016~02~ MP~0639161~0090~13~177~0081~02~0200~ .8500~     8.8500~         27.00~0530~9970~                TAYA~1.000~          33.0~          40.0~      8,124 ~        905 ~        425 ~            ~00060~2006~              ~              ~ ~              ~2007~              ~              ~ ~              ~2008~              ~              ~ ~              ~2009~              ~              ~T~          47.0~2010~        481.70~         24.80~A~          19.0~2011~              ~              ~Z~              ~2012~        261.90~         24.80~A~          11.0~2013~              ~              ~Z~              ~2014~      1,349.33~         24.90~A~          54.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00
    2016~02~ MP~0639161~0080~13~177~0081~02~0200~ .8500~     8.8500~         18.40~0530~9970~                TAYA~1.000~          40.0~          45.0~      6,237 ~        554 ~        260 ~            ~00120~2006~              ~              ~ ~              ~2007~              ~              ~ ~              ~2008~              ~              ~ ~              ~2009~              ~              ~ ~              ~2010~              ~              ~T~          47.0~2011~              ~              ~T~          47.0~2012~        211.00~         18.40~A~          11.0~2013~              ~              ~Z~              ~2014~      1,038.34~         18.40~A~          56.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00
    2016~02~ MP~0639166~0020~34~033~0011~02~0102~ .5000~     5.1300~         25.00~0030~0110~                    ~ .500~          62.0~          62.0~      1,988 ~         70 ~         23 ~            ~00170~2004~      5,234.00~        103.70~A~          50.0~2005~      6,481.00~         94.40~A~          69.0~2006~      3,308.00~         56.30~A~          59.0~2007~      6,548.00~         96.10~A~          68.0~2008~      2,679.00~         40.00~A~          67.0~2011~      2,226.00~         39.40~A~          56.0~2012~              ~              ~Z~              ~2013~      1,766.00~         40.00~A~          44.0~2014~      3,129.50~         36.20~A~          86.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00

输出1:

2016~02~ MP~0639161~0090~13~177~0081~02~0200~ .8500~     8.8500~         27.00~0530~9970~                TAYA~1.000~          33.0~          40.0~      8,124 ~        905 ~        425 ~            ~00060~2006~              ~              ~ ~              ~2007~              ~              ~ ~              ~2008~              ~              ~ ~              ~2009~              ~              ~T~          47.0~2010~        481.70~         24.80~A~          19.0~2011~              ~              ~Z~              ~2012~        261.90~         24.80~A~          11.0~2013~              ~              ~Z~              ~2014~      1,349.33~         24.90~A~          54.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00
2016~02~ MP~0639161~0080~13~177~0081~02~0200~ .8500~     8.8500~         18.40~0530~9970~                TAYA~1.000~          40.0~          45.0~      6,237 ~        554 ~        260 ~            ~00120~2006~              ~              ~ ~              ~2007~              ~              ~ ~              ~2008~              ~              ~ ~              ~2009~              ~              ~ ~              ~2010~              ~              ~T~          47.0~2011~              ~              ~T~          47.0~2012~        211.00~         18.40~A~          11.0~2013~              ~              ~Z~              ~2014~      1,038.34~         18.40~A~          56.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00

输出2:

2016~02~ MP~0639166~0020~34~033~0011~02~0102~ .5000~     5.1300~         25.00~0030~0110~                    ~ .500~          62.0~          62.0~      1,988 ~         70 ~         23 ~            ~00170~2004~      5,234.00~        103.70~A~          50.0~2005~      6,481.00~         94.40~A~          69.0~2006~      3,308.00~         56.30~A~          59.0~2007~      6,548.00~         96.10~A~          68.0~2008~      2,679.00~         40.00~A~          67.0~2011~      2,226.00~         39.40~A~          56.0~2012~              ~              ~Z~              ~2013~      1,766.00~         40.00~A~          44.0~2014~      3,129.50~         36.20~A~          86.0~2015~              ~              ~Z~              ~          ~  ~        0.00~          0.00

1 个答案:

答案 0 :(得分:0)

创建输出文件名,如13.txt,34.txt,...

当您第二次运行时,请不要删除先前创建的文件,因为它附加了>>

awk -F'~' '{f=$6".txt";  print >> f; close(f)}' file 

创建输出文件名,如Output_1.txt,Output_2.txt,...

这一个负责覆盖,所以当你第二次跑时不需要担心

awk -F'~' '          # call awk set field sep ~
 !($6 in F){         # if $6 as index does not exist in array F then


      # if you want to create filename by 6th field value
      # 13.txt, 34.txt ...
      # then just make F[$6]=$6".txt";

      # Created output file like Output_1.txt, Output_2.txt
      F[$6]="Output_"++i".txt"; 

      # write record to file, close file and go to next line
      print >F[$6]; close(F[$6]); next
 }
 {
   # append record to file, and close file
   print >>F[$6]; close(F[$6])
 }' file