一直致力于我自己的项目(实际上是在学习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”显示在下面)
勇气:
(应该能够输入信息,当我完成命令后,下一行重复所有这些,直到文件中的最后一行)
有人可以指导我达到我想要的结果吗?
答案 0 :(得分:1)
此代码似乎不使用read
命令的Bash扩展。它适用于Bash作为sh
和ksh
运行。我在将样本数据添加到问题之前写了它。我不会改写它,但问题变得更加复杂。
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
输入中有很多字段。目前尚不清楚您应该对输入行或提示数据做什么。如果您需要将回复编辑到该行中,那么您将面临更加可怕的工作。