Python 用另一个文件中列表的每一行替换文件中的特定文本

Python 用另一个文件中列表的每一行替换文件中的特定文本,python,bash,awk,Python,Bash,Awk,我有一个txt文件,这是一个巨大的列表。每行代表一个值 我想用txt文件的每一行替换主文件中的每个特定值 已搜索,但在bash或python中找不到类似的内容 示例(主文件中的每个“1”都应替换为txt文件的每一行): 你能试试下面的吗 awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1'

我有一个txt文件,这是一个巨大的列表。每行代表一个值

我想用txt文件的每一行替换主文件中的每个特定值

已搜索,但在bash或python中找不到类似的内容

示例(主文件中的每个“1”都应替换为txt文件的每一行):


你能试试下面的吗

awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file
awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file > temp && mv temp main_file
awk '
FNR==NR{
  a[FNR]=$0
  next
}
FNR==1{
  val=length(a)
}
{ 
  gsub(/1/,a[++count])
  count=val==count?0:count
}
1
' text_file main_file
要将输出保存到主文件中,请使用以下命令

awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file
awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file > temp && mv temp main_file
awk '
FNR==NR{
  a[FNR]=$0
  next
}
FNR==1{
  val=length(a)
}
{ 
  gsub(/1/,a[++count])
  count=val==count?0:count
}
1
' text_file main_file
输出如下

httpDownload("A", localPath .."A")
httpDownload("B", localPath .."B")
httpDownload("C", localPath .."C")
httpDownload("D", localPath .."D")
httpDownload("E", localPath .."E")


第二种解决方案:如果文本文件的字符串值小于主文件的字符串值,则可能需要从第1个字符开始(再次从一个字符开始将其放入主文件),然后使用以下命令

awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file
awk 'FNR==NR{a[FNR]=$0;next} {gsub(/1/,a[++count])} 1' text_file main_file > temp && mv temp main_file
awk '
FNR==NR{
  a[FNR]=$0
  next
}
FNR==1{
  val=length(a)
}
{ 
  gsub(/1/,a[++count])
  count=val==count?0:count
}
1
' text_file main_file

只需使用
gawk
功能即可使用指定文件中的一行:

$ awk '{ getline c < "f1.txt"; gsub("1", c, $0) }1' main.txt
httpDownload("A", localPath .."A")
httpDownload("B", localPath .."B")
httpDownload("C", localPath .."C")
httpDownload("D", localPath .."D")
httpDownload("E", localPath .."E")
$awk'{getline c<“f1.txt”;gsub(“1”,c,$0)}1'main.txt
httpDownload(“A”,localPath.“A”)
httpDownload(“B”,localPath.“B”)
httpDownload(“C”,localPath.“C”)
httpDownload(“D”,localPath.“D”)
httpDownload(“E”,localPath.“E”)
有力地:

$ cat tst.awk
BEGIN {
    tgt  = 1
}
NR==FNR {
    if ( /"/ ) {
        printf "WARNING: %s line %d contains \": %s\n", FILENAME, NR, $0 | "cat>&2"
    }
    if ( /\\$/ ) {
        printf "WARNING: %s line %d ends in \\: %s\n", FILENAME, NR, $0 | "cat>&2"
    }
    vals[NR] = $0
    next
}
{
    old = $0
    new = ""
    while ( pos = index(old,tgt) ) {
        new = new substr(old,1,pos-1) vals[FNR]
        old = substr(old,pos+length(tgt))
    }
    $0 = new old
    print
}


不清楚的。您是否发布了实际的
main
文件内容?主文件将包含“1”个重复次数。对于txt文件,主文件中的每个“1”都应替换为一行。如果主文件包含的行比txt文件多怎么办?需要的输出是什么?它不会包含更多的行。我有一个带有重复命令的脚本(主文件)。命令的数量与txt文件中的行数匹配。我需要用一行txt文件替换每个命令上的特定信息。每一条命令的每一行。显然它起作用了。但是,没有保存文件(只是在终端中显示了输出)。@AndréLuís,现在检查一下,你可以使用我的第一个解决方案的OR选项,然后告诉我?它会给我空白输出。它曾经起过作用,但现在已经不起作用了。让我看看我是不是做错了什么。我做错了什么(主文件是空的)。它工作完美无瑕。谢谢@AndréLuís,这对我来说很好,如果有任何疑问,请让我知道。