Bash

創建文件的多個副本,每個副本中的一行已更改

  • June 28, 2018

我必須自動化模擬,為此我需要為每個模擬創建輸入文件。我的大多數模擬幾乎是相同的,一行文本從一個文件更改為下一個文件。如何獲取文本文件,並製作多個副本並更改特定行?例如,如果保存一個文本文件:

! input file
a = 6
b = 6
d = 789
! end

假設我想從此模板創建 6 個新文件,但我的變數 b 在每個後續文件中都減少了一個,我該如何在 bash 或 python 中執行此操作?

基本方法可以與範例中的此類似,我修改 a= value bye numbers & files & filename 在裡面也有值,所以它是分開的文件

#!/bin/bash


for i in a b c 1 2 3  ; do
   cat > file${i} << EOT
! input file
a = ${i}
b = 6
d = 789
! end
EOT
done

所以你會得到 6 個具有 6 個不同內容的文件:

# cat file?
! input file
a = 1
b = 6
d = 789
! end
! input file
a = 2
b = 6
d = 789
! end
! input file
a = 3
b = 6
d = 789
! end
! input file
a = a
b = 6
d = 789
! end
! input file
a = b
b = 6
d = 789
! end
! input file
a = c
b = 6
d = 789
! end

如果您必須從參考文件中讀取 b 值,您可以使用 read 子命令中的變數,例如

while read ; do
cat > file${REPLY} << EOT
! input file
a = 1
b = ${REPLY}
d = 789
! end
EOT
done < referencefile

真實情況下的完整範例:

[root@h2g2w tmp]# cat > ./test.sh
while read ; do
cat > file${REPLY} << EOT
! input file
a = 1
b = ${REPLY}
d = 789
! end
EOT
done < referencefile


[root@h2g2w tmp]# cat > referencefile 
qsd
gfd
eza
vxcv
bxc
[root@h2g2w tmp]# 
[root@h2g2w tmp]# sh ./test.sh 
[root@h2g2w tmp]# ls -lrth file???
-rw-r--r--. 1 root root 41 28 juin  22:47 fileqsd
-rw-r--r--. 1 root root 41 28 juin  22:47 filegfd
-rw-r--r--. 1 root root 41 28 juin  22:47 fileeza
-rw-r--r--. 1 root root 41 28 juin  22:47 filebxc
[root@h2g2w tmp]# cat file???
! input file
a = 1
b = bxc
d = 789
! end
! input file
a = 1
b = eza
d = 789
! end
! input file
a = 1
b = gfd
d = 789
! end
! input file
a = 1
b = qsd
d = 789
! end
[root@h2g2w tmp]# 

我希望您現在可以根據自己的需要進行調整。

引用自:https://unix.stackexchange.com/questions/452511