迭代文字檔案中的元組或名稱列表

迭代文字檔案中的元組或名稱列表

我在 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 等效項主要使用相同的格式字串)。

相關內容