首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复文件内容,直到达到定义的行数。

重复文件内容,直到达到定义的行数。
EN

Stack Overflow用户
提问于 2014-04-02 17:32:21
回答 3查看 145关注 0票数 1

拥有一个类似于下一个file.txt的文件

代码语言:javascript
复制
line-01
line-02
line-03
line-04
line-05
line-06
line-07
line-08
line-09
line-10

这包括10个统一的行,真正的文件有不同的内容和不同的线条。

需要重复此文件的内容,以达到定义的行计数。

尝试了下一个脚本:

代码语言:javascript
复制
repcat() {
    while :
    do
        cat $1
    done
}

repcat file.txt | head -20

它工作,打印20行,但永不结束,需要终止与CTRL。

为什么repcat继续写入管道,在没有人读取其结果的情况下?

更奇怪的是,在echo之后添加一个cat

代码语言:javascript
复制
repcat() {
        while :
        do
                cat $1
                echo xxx
        done
}

repcat file.txt | head -20

剧本结束了。

不明白为什么会有这种行为。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-02 17:36:16

cat收到写入管道的错误时,它只是退出,脚本继续到下一个循环。尝试检查cat是否成功:

代码语言:javascript
复制
repcat() {
    while cat "$1"
    do 
        :
    done
}

它与附加echo一起工作的原因是因为echo是一个内置的shell。当它得到错误时,它将终止该函数。

票数 5
EN

Stack Overflow用户

发布于 2014-04-02 18:33:41

您还可以使用:

代码语言:javascript
复制
yes "$(< file.txt)" | head -n 20
票数 2
EN

Stack Overflow用户

发布于 2014-04-02 18:09:19

以下是另一种方法:

代码语言:javascript
复制
rephead () { 
    local n=$1; shift        
    if (($# > 0)); then
        input=$(cat "$@")
    else
        input=$(cat -)
    fi
    local lines=$(wc -l <<< "$input")
    local count=0
    while ((count < n)); do
        echo "$input"
        ((count += lines))
    done | head -n $n
}

测试:

代码语言:javascript
复制
$ seq 3 | rephead 10
1
2
3
1
2
3
1
2
3
1

还有文件

代码语言:javascript
复制
$ cat f1
one
two 
three
four
$ cat f2
a
b
c
d
$ rephead 10 f1 f2
one
two
three
four
a
b
c
d
one
two
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22818814

复制
相关文章

相似问题

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