将文件分割成块,第一块中包含更多行

将文件分割成块,第一块中包含更多行

我正在尝试分离一个包含 4100 行的大文件。分隔 6 行数字作为文件,其他行需要作为 4 行数字作为文件跟随。请考虑以下内容。

如何编写 bash 脚本?

答案1

你可以尝试awk

awk '{if (NR>6){if ((NR-6)%4==1){++c}} else {c=1}};{print >"file"c".las"}' infile

gnu设置上并且使用相对较新的版本split 它允许您添加后缀你也可以这样做:

{ printf %s\\n\\n; cat infile; } | split -d -l 4 --additional-suffix='.las' - file
( set ./*.las
sed '1d
s/\\/&&/g
2c\
1i\\
3s/$/\\/' "$1" | sed -f - -i "$2"
rm -f "$1" )

也就是说,打印两个空行,然后打印文件,将组合输出分成四行,将原始输入中的前两行通过sed(在转义反斜杠之后 - 如果有的话)插入第二部分,最后删除第一部分。但请记住,这将对块名称进行零填充,因此您最终会得到file0001.las

答案2

以下命令将按照描述进行分割,假设文件每四行分割一次。输出文件将被命名为output00,例如output01,,等等。然后,您可以重命名所有output*文件,将.las后缀固定到末尾,如果需要,还可以去掉前导零。

split -l4 -d ./input_file output

答案3

csplit -s -k -f file. inoutfile '/^/+6' '/^/+4' '{*}'

相关内容