我有一个大文件,我需要使用第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
答案 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