awk 命令将 8GB 文件拆分为多个文件,根据每个文件中具有新文件名和标题的行数
我有一个包含 26 个列标题的 8GB 文件。我必须将它拆分为多个文件,每个文件有 400000 万,包括标题。这意味着每个文件也应该有标题。
我尝试了多个命令,但即使我得到了所需的输出,也有一个小问题,但很奇怪。
在第 1 行作为标题之后,每隔 50000 行再次插入标题。 例如,使用以下命令后,我得到了 FileName_28062021_1.txt 文件。如果我打开这个文件,我可以看到第 1、50001、100001、150001 行的标题:不确定如何解决。原始命令尝试:
awk '
NR==1{header=$0; count=1; print header > "FileName_28062021_" count ".txt"; next }
!( (NR-1) % 399999){count++; print header > "FileName_28062021_" count ".txt";}
{print $0 > "FileName_28062021_" count ".txt"}
' FileName_28062021-SourceFile.txt
SERVERIF:/data1/tempCheckAWK $ wc -l FileName_28062021-NonSplit.txt
46646575 FileName_28062021-NonSplit.txt
尝试了第二个 AWK 命令
SERVERIF:/data1/tempCheckAWK $ vi tempAWK.sh
awk '
NR==1 { header = $0 }
(NR % 400000) == 1 {
close(out)
out = "FileName_28062021_" (++count) ".txt"
print header > out
}
NR>1 { print > out }
' FileName_28062021-NonSplit.txt
SERVERIF:/data1/tempCheckAWK $ sh tempAWK.sh
SERVERIF:/data1/tempCheckAWK $ ls -ltr
Jun 10 13:43 FileName_28062021-NonSplit.txt
Jun 28 23:56 tempAWK.sh
Jun 28 23:59 FileName_28062021_1.txt
Jun 28 23:59 FileName_28062021_2.txt
……
SERVERIF:/data1/tempCheckAWK $wc -l FileName_28062021_1.txt
400000 FileName_28062021_1.txt
SERVERIF:/data1/tempCheckAWK $grep "Transactions Id" FileName_28062021_1.txt
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
Transactions Id|Transaction Date|Investment Id|External Code
我已经尝试过 stackoverflow 上提供的其他解决方案。仍然没有运气,标题在第 50000 次后重复后重复