使用awk将文件拆分为每行5000行的块,然后按顺序重命名。我需要将原始文件名保留为扩展名的一部分,以便它们不会覆盖以前拆分的文件。这就是我尝试内联的原因。
我在文件扩展名中的句点出错。我尝试过使用变量和多种引用方式。我通过Bash shell在循环中运行此命令
input_file="$(basename "${file}")"
gawk 'NR%5000==1{x=../library-extract/msplit-bib/temp/'"${input_file}"'++i.split.xml;}{print > x}'
我在文件扩展名
中的所有句点都遇到语法错误有谁能告诉我如何解决这个问题?
答案 0 :(得分:2)
awk需要引用文字字符串:
gawk -v f="$input_file" '
NR%5000==1 {x = "../library-extract/msplit-bib/temp/" f (++i) ".split.xml"}
{print > x}
'
(++i)
周围的括号必须确保f ++i
不被视为f plus positive i
或
gawk -v f="../library-extract/msplit-bib/temp/$input_file/%d.split.xml" '
NR%5000==1 {x = sprintf(f, ++i)}
{print > x}
'
答案 1 :(得分:1)
你知道你可以对split
做同样的事情(没有对文件名的完全控制,但它很简单rename
)
split -l 5000 -da 3 filepath prefix.
您可以在其中设置与filepath相同的前缀。选项-da 3
将数字扩展名设置为3位数。