我需要創建多個具有如下內容的檔案,并從其他 3 個檔案中替換它的值。
name:
url:
description:
我嘗試使用 while 回圈向上述內容添加值,但它以 3^3 組合執行,實際上我需要的是創建一個檔案,其中 3 個檔案的第一行被替換,第二個檔案被 3 個檔案的第二行替換等等。
這是我使用的代碼。
while read line1;
do
while read line2;
do
while read line3;
do
echo "
name: $line1
url: $line2
description: $line3
" > $line1.txt ;
done < url.txt
done < description.txt
done < name.txt
uj5u.com熱心網友回復:
在嵌套回圈中,每個回圈都會一次性處理整個檔案,從而導致輸出不同步。
相反,您需要在單個 while 回圈中讀取 3 個檔案,使用額外的檔案描述符來處理其他檔案:
while read name && read description <&3 && read url <&4; do
echo "
name: $name
url: $url
description: $description
" > $name.txt
done < name.txt 3< description.txt 4< url.txt
uj5u.com熱心網友回復:
假設檔案name.txt、url.txt和description.txt具有相同的行數,可以使用paste和sed實用程式完成此任務:
paste -d '\n' name.txt url.txt description.txt |
sed 'N;N;s/\(.*\n\)\(.*\n\)/name: \1url: \2description: /'
或者,如果檔案不是太大,替代bash解決方案可能是:
#!/bin/bash
mapfile names < name.txt
mapfile urls < url.txt
mapfile descs < description.txt
for ((i = 0; i < ${#names[@]}; i)); do
printf 'name: %surl: %sdescription: %s' \
"${names[i]}" "${urls[i]}" "${descs[i]}"
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/399214.html
