如何在文件的每一行之后回显文本和读取输入?

时间:2015-08-20 16:26:50

标签: list printing awk

一直致力于我自己的项目(实际上是在学习bash编程)并遇到了一个我被困了几天的步骤。

我假装使用awk打印文件的第一行,然后在该行下打印字段以手动完成。我希望它为该文件中的每一行重复该过程。

我的脚本打印列表上方的文件的所有行,并永远循环。它应该停在最后一行。

这就是我所得到的:

while awk -F"|" 'NR' resultado.txt; do
    echo "Histórico:"
    read Historico
    echo "Conta:"
    read Conta2
    echo "Valor:"
    read Valor
done

示例:

要处理的文件中的行:

LAURVOGT|    31|02/05/2015|6.1.1.01.001|2.1.1.01.005||8,100|DIVERSOS|||N|||   ||S|CB|||05|||||||31,000|N|N|||0,000|
LAURVOGT|    34|03/05/2015|6.1.1.01.002|2.1.1.01.005||6,900|DIVERSOS|||N|||   ||S|CB|||05|||||||34,000|N|N|||0,000|

如何处理它们:

LAURVOGT|    31|02/05/2015|6.1.1.01.001|2.1.1.01.005||8,100|DIVERSOS|||N|||   ||S|CB|||05|||||||31,000|N|N|||0,000|

历史一:

(应该可以输入信息,当我完成下一步“Conta”显示在下面)

CONTA:

(应该可以输入信息,当我下次完成时“Valor”显示在下面)

勇气:

(应该能够输入信息,当我完成命令后,下一行重复所有这些,直到文件中的最后一行)

有人可以指导我达到我想要的结果吗?

1 个答案:

答案 0 :(得分:1)

此代码似乎不使用read命令的Bash扩展。它适用于Bash作为shksh运行。我在将样本数据添加到问题之前写了它。我不会改写它,但问题变得更加复杂。

reader.sh

while read -r line <&3
do
    echo "$line" >&4
    echo "Histórico: "
    read -r Historico
    echo "$Historico" >&4
    echo "Conta: "
    read -r Conta2
    echo "$Conta2" >&4
    echo "Valor: "
    read -r Valor
    echo "$Valor" >&4
done 3<resultado.txt 4>output.txt

大量的I / O重定向。输出转到文件描述符4,它指向文件output.txt。文件输入在文件描述符3上,来自resultado.txt。循环顶部的read命令从文件描述符3重定向其标准输入,这意味着它读取resultado.txt的下一行。终端回显体中的echo "Xyz: "命令(标准输出)。有一些方法可以在echo之后取消换行符,但它们依赖于shell(echo -n是单向的; echo "Xyz: \c"是另一种方式)。循环体中的read -r Xyz命令从终端读取。 echo "$Xyz" >&4命令将输出发送到文件描述符4,echo "$line"也是如此。

如果您有Bash,则可以使用read -r -u 3 line代替read进行I / O重定向。您还可以使用read -p 'Valor: ' -r Valor来提示和阅读输入。

resultado.txt

This is the first line.
This is the second line.
This is the third line.

运行示例

我不喜欢打字,所以我有一个随机数生成器生成足够的数据。当我将自己用作随机输入的生成器时,它确实有效。

$ random -n 9 -F "RNG: %.2d" 0 99 | sh reader.sh
Histórico: 
Conta: 
Valor: 
Histórico: 
Conta: 
Valor: 
Histórico: 
Conta: 
Valor: 
$

output.txt

This is the first line.
RNG: 66
RNG: 49
RNG: 02
This is the second line.
RNG: 18
RNG: 90
RNG: 36
This is the third line.
RNG: 56
RNG: 22
RNG: 95

修订问题

输入中有很多字段。目前尚不清楚您应该对输入行或提示数据做什么。如果您需要将回复编辑到该行中,那么您将面临更加可怕的工作。