我正在尝试分离一个包含 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' '{*}'