首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按行号向量分割文件

按行号向量分割文件
EN

Stack Overflow用户
提问于 2020-07-17 12:19:19
回答 5查看 139关注 0票数 2

我有一个大文件,大约10。我有一个行号向量,我想用它来分割文件。理想情况下,我希望使用命令行实用程序来完成这一任务。作为一种准则:

文件:

代码语言:javascript
运行
复制
1 2 3 
4 5 6
7 8 9 
10 11 12 
13 14 15
16 17 18

行号向量:

代码语言:javascript
运行
复制
2 5

期望产出:

档案1:

代码语言:javascript
运行
复制
1 2 3 

档案2:

代码语言:javascript
运行
复制
4 5 6
7 8 9 
10 11 12 

档案3:

代码语言:javascript
运行
复制
13 14 15
16 17 18
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-07-19 11:50:15

这可能对你有用:

代码语言:javascript
运行
复制
csplit -z file 2 5

或者如果你想要regexp:

代码语言:javascript
运行
复制
csplit -z file /2/ /5/

对于默认值,输出文件将命名为xxnn,其中nn00开始,并递增1。

注:-z选项可以防止空文件。

票数 2
EN

Stack Overflow用户

发布于 2020-07-17 12:46:30

使用awk:

代码语言:javascript
运行
复制
$ awk -v v="2 5" '       # space-separated vector if indexes
BEGIN {
    n=split(v,t)         # reshape vector to a hash
    for(i=1;i<=n;i++)
        a[t[i]]
    i=1                  # filename index
}
{
    if(NR in a) {        # file record counter in the vector
        close("file" i)  # close previous file
        i++              # increase filename index
    }
    print > ("file" i)   # output to file
}' file

样本输出:

代码语言:javascript
运行
复制
$ cat file2
4 5 6
7 8 9 
10 11 12 
票数 4
EN

Stack Overflow用户

发布于 2020-07-17 14:11:26

与James和kvantour的解决方案略有不同:将向量作为“文件”传递给awk

代码语言:javascript
运行
复制
vec="2 5"

awk '
    NR == FNR {nr[$1]; next}
    FNR == 1 {filenum = 1; f = FILENAME "." filenum}
    FNR in nr {
        close(f)
        f = FILENAME "." ++filenum
    }
    {print > f}
' <(printf "%s\n" $vec) file
代码语言:javascript
运行
复制
$ ls -l file file.*
-rw-r--r-- 1 glenn glenn 48 Jul 17 10:02 file
-rw-r--r-- 1 glenn glenn  7 Jul 17 10:09 file.1
-rw-r--r-- 1 glenn glenn 23 Jul 17 10:09 file.2
-rw-r--r-- 1 glenn glenn 18 Jul 17 10:09 file.3
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62953828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档