awk拆分文件并保留文件名

时间:2016-02-24 20:43:19

标签: bash shell awk

使用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}'

我在文件扩展名

中的所有句点都遇到语法错误

有谁能告诉我如何解决这个问题?

2 个答案:

答案 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位数。