所以假設我有一個“fruit.txt”檔案,每行都有一個單詞,比如
蘋果
香蕉
栗子
我如何閱讀文本檔案并以以下形式創建串列
Apple0
Apple1
Apple2
...
栗子9
?
uj5u.com熱心網友回復:
無論您在哪個 shell 中撰寫腳本,您都需要遍歷檔案中的名稱,fruit.txt然后回圈您希望將那么多數字附加到檔案中的每個單詞的次數。嵌套回圈,外部回圈遍歷名稱,fruit.txt內部回圈一次以追加每個數字。(用內部回圈附加0-9回圈時間)10
由于您標記了[shell]您,因此要求提供與 POSIX shell 兼容的解決方案。這可以很簡單:
#!/bin/sh
fname="${1:-fruit.txt}" ## set filename to read (default fruit.txt)
nvers="${2:-10}" ## take no. of version to create with digits
## validate file is available and non-empty or exit
[ -s "$fname" ] || {
printf "error: %s is not found or empty.\n" "$fname" >&2
exit 1
}
## read each line in fname
while read -r word; do
n=0 ## set counter zero
while [ "$n" -lt "$nvers" ]; do ## loop $nvers many times
printf "%s%d\n" "$word" "$n" ## write word with digit
n=$((n 1)) ## increment counter
done
done < "$fname"
(如果你使用 bash,你可以使用 C 風格for((...))的回圈作為內部回圈)
示例使用/輸出
由于每個fname( fruit.txt) 和nver( 10) 都有一個默認值,如果您想要默認值,您只需要運行腳本,例如
$ sh append_digits.sh
Apple0
Apple1
Apple2
Apple3
...
Chestnut7
Chestnut8
Chestnut9
要僅創建每種水果的 4 個版本,您可以簡單地給出必要的引數,例如
$ sh append_digits.sh fruit.txt 4
Apple0
Apple1
Apple2
Apple3
Banana0
Banana1
Banana2
Banana3
Chestnut0
Chestnut1
Chestnut2
Chestnut3
使用 awk
在 shell 中作業的正確工具是awk您可以簡單地讀取檔案回圈中的每一行,但是需要多次附加您想要的數字,例如
$ awk '{ for(i=0; i<10; i ) print $1 i }' fruit.txt
Apple0
Apple1
Apple2
Apple3
...
Chestnut7
Chestnut8
Chestnut9
如果要傳入要創建的版本數,可以使用-v選項awk在命令列上宣告變數,例如
awk -v n=4 '{ for(i=0; i<n; i ) print $1 i }' fruit.txt
這將輸出0-3每種水果的版本。容易得多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/512826.html
標籤:壳
