迭代文本文件中的元组或名称列表

迭代文本文件中的元组或名称列表

我在 Linux 脚本中有以下命令。

#!/bin/bash

for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
    set -- $i
    echo $1
    echo $2
done

001 和 ARG1 本质上是元组,

有没有办法将这些元组移动到文本文件中,我可以将其加载到 forloop 中?这么多我会保存这样的文本文件

ARG1
ARG2
ARG3

或者

001 ARG1
002 ARG2
003 ARG3

脚本将是

for i in textfile.txt
do
    set -- $i
    echo $1
    echo $2
done

并得到相同的结果?

还有没有办法让 001 002 自动计数?就像在 python 中如何设置 counter = 0 和 counter+=1 并分配一个变量一样。

答案1

在文件的每一行上给出两个空格或制表符分隔的单词,如输入文件的第二个示例所示:

while read -r word1 word2; do
    echo "$word1"
    echo "$word2"
done <textfile.txt

这会将每行的第一个单词读入$word1,并将该行的其余部分读入$word2

的输入read由复合命令的输入给出while,该命令通过重定向从文件中获取它。

如果该字符出现在输入中,则可以停止以任何特殊方式-r进行read解释的选项。\

每行一个单词和一个计数器:

counter=0
while read -r word; do
    counter=$(( counter + 1 ))
    echo "$counter"
    echo "$word"
done <textfile.txt

这会在每次迭代中将计数器加一(对于从 读取的每一行textfile.txt)。

要获得一个以零填充的三位数计数器,请使用printf以下格式字符串输出计数器%.3d\n

printf '%.3d\n' "$counter"

... 代替echo "$counter".

有关含义的说明%.3d\n,请参阅 C 库函数的文档printfman 3 printf,shell 等效项主要使用相同的格式字符串)。

相关内容