Bash
創建文件的多個副本,每個副本中的一行已更改
我必須自動化模擬,為此我需要為每個模擬創建輸入文件。我的大多數模擬幾乎是相同的,一行文本從一個文件更改為下一個文件。如何獲取文本文件,並製作多個副本並更改特定行?例如,如果保存一個文本文件:
! 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]#
我希望您現在可以根據自己的需要進行調整。