繁体   English   中英

如何通过头尾操作在文件中使用管道?

[英]How to use the pipe in a file with head-tail operation?

    size=$(wc -l < "$1")
    if [ "$size" -gt 0 ]
    then
        tr "[:lower:]" "[:upper:]" < $1  > output
        for (( i=1; i <= "$size"; ++i ))
        do
            echo "Line " $i $(head -"$i" > output | tail -1 > output)
        done

嗨,大家好! 我有这个小代码的问题。 除了头尾,其他一切都正常。 我想做的只是显示文件中的行号“ i”。 我收到的结果只是最后一行($ size)。

我认为输入tail可能有问题。 标题-“ $ i”不在指定行。 :( 有什么想法吗?

哦,我刚刚意识到:作为我的尾巴的输入,我给出了与头部相同的输入。 解决的办法是将结果从头部移到尾部。 我怎么做? : - /

您无需从head重定向到文件output 否则,管道根本不会获得任何输入。 另外,使用>>附加结果,否则,您将仅在循环的下一次迭代中覆盖该文件。 但是请确保在每次调用脚本之前删除输出文件,否则您将一直无限追加到输出文件。

echo "Line " $i $(head -"$i" $infile | tail -1 >> output)

使用read从文件中获取一行输入。

# Since `1` is always true, essentially count up forever
for ((i=1; 1; ++i)); do
    # break when a read fails to read a line
    IFS= read -r line || break
    echo "Line $i: $(tr [:lower:] [:upper:])"
done < "$1" > output

一种更标准的方法是遍历文件并显式维护i

i=1
while IFS= read -r line; do
    echo "Line $i: $(tr [:lower:] [:upper:])"
    ((i++))
done < "$1" > output

我认为您正在使用前缀“ Line”重新实现cat -n 如果是这样, awk救援!

awk '{print "Line "NR, tolower($0)}'

我做到了。 :d

诀窍是将head的输出放到另一个文件中,该文件将成为tail的输入,如下所示:

echo "Line " $i $(head -"$i" < output >outputF | tail -1 < outputF)

您的问题使我有不同的想法。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM