Bash 是否用shell脚本中另一个文本文件的值替换特定行?

Bash 是否用shell脚本中另一个文本文件的值替换特定行?,bash,shell,text,Bash,Shell,Text,我有一个文件,是8行单星号。我有4个文本文件,每个文件中有两行数字。我想为每个文本文件创建一个新文件,其中行号I+2和I+3由文本文件的内容替换。例如: 文件1将是: 1 5 7 8 2 4 5 6 我想将其转换为: 1 5 7 8 2 4 5 6 * * * * * * 文件2将从以下内容转换: 6 5 6 7 8 9 0 9 致: 有没有一种方法可以遍历目录中的文本文件,像上面那样转换每个文本文件 谢谢 更新:也许这可以更好地解释: 基本

我有一个文件,是8行单星号。我有4个文本文件,每个文件中有两行数字。我想为每个文本文件创建一个新文件,其中行号I+2和I+3由文本文件的内容替换。例如:

文件1将是:

1 5 7 8  
2 4 5 6  
我想将其转换为:

1 5 7 8  
2 4 5 6  
*  
*  
*  
*  
*  
*  
文件2将从以下内容转换:

6 5 6 7  
8 9 0 9  
致:

有没有一种方法可以遍历目录中的文本文件,像上面那样转换每个文本文件

谢谢

更新:也许这可以更好地解释:


基本上我有n个文本文件,每个文件只有两行数字。我想在文本文件中循环,将每个文本文件转换为另一个文本文件,其中有n x 2行,第一个文本文件的值占据第1行和第2行,其余行为*。第二个文本文件将有n x 2行,但第三行和第四行是文件值,其余为*。第三个文件有nx2行,第6行和第7行用其值填充,其余为*,依此类推

不知道如何在shell中轻松实现这一点,但GNU awk有一些特性使其非常简单

parse.awk

BEGINFILE{
outfile=ARGV[argid]“.new”
对于(i=1;i输出文件
} 
{打印>输出文件}
结束文件{
对于(i=1;i输出文件
关闭(输出文件)
}
按如下方式运行:

gawk -f parse.awk File*
解释 ARGV是一个数组,包含输入文件的名称。argid是当前正在处理的文件的ARGV索引,ARGC是ARGV的长度,即给定的参数数


BEGINFILE和ENDFILE块是在开始/完成文件处理时执行的,因此在您的情况下它们是方便的钩子。

不知道如何在shell中轻松完成这一点,但GNU awk有一些特性使其非常简单

parse.awk

BEGINFILE{
outfile=ARGV[argid]“.new”
对于(i=1;i输出文件
} 
{打印>输出文件}
结束文件{
对于(i=1;i输出文件
关闭(输出文件)
}
按如下方式运行:

gawk -f parse.awk File*
解释 ARGV是一个数组,包含输入文件的名称。argid是当前正在处理的文件的ARGV索引,ARGC是ARGV的长度,即给定的参数数


BEGINFILE和ENDFILE块在开始/完成文件处理时执行,因此在您的情况下它们是方便的挂钩。

bash
解决方案:

n=8
i=0
for file in * ; do 
    { 
        for ((a=0 ; a<n ; a++)) ; do
            ((a==i)) && cat "$file"
            echo $'*\n*'
        done
    } > "$file".out
    let i++
done
n=8
i=0
要在*中归档;请执行以下操作
{ 
for((a=0;a“$file.out
让我++
完成

bash
解决方案:

n=8
i=0
for file in * ; do 
    { 
        for ((a=0 ; a<n ; a++)) ; do
            ((a==i)) && cat "$file"
            echo $'*\n*'
        done
    } > "$file".out
    let i++
done
n=8
i=0
要在*中归档;请执行以下操作
{ 
for((a=0;a“$file.out
让我++
完成

什么是
i
?您的意思是
其中我表示第i个文件
行号(i*2)-1和(i*2)被…的内容替换。
是否总是正好有4个带数字的文本文件,并且总是只有一个带8行单星号的文件?基本上,我有n个文本文件,每个文件只有两行数字。我想循环浏览文本文件,将每个文本文件转换为另一个文本文件,其中有n x 2个数字行,第一个文本文件的值占据第1行和第2行,其余的行是*。第二个文本文件将有n x 2行,但第三行和第四行是文件值,其余的行是*。第三个文件有n x 2行,第六行和第七行填充了它的值,其余的行是*,依此类推。是的,我应该是rE表示文件编号;我上一篇文章有助于更好地解释它吗?什么是
i
?你是说
其中我表示第i个文件
行编号(i*2)-1和(i*2)被…的内容替换。
是否总是正好有4个带数字的文本文件,并且总是只有一个带8行单星号的文件?基本上,我有n个文本文件,每个文件只有两行数字。我想循环浏览文本文件,将每个文本文件转换为另一个文本文件,其中有n x 2个数字行,第一个文本文件的值占据第1行和第2行,其余的行是*。第二个文本文件将有n x 2行,但第三行和第四行是文件值,其余的行是*。第三个文件有n x 2行,第六行和第七行填充了它的值,其余的行是*,依此类推。是的,我应该是rE表示文件号;我上一篇文章解释得更好了吗?太棒了,去试试吧。你如何指定*的基础文件数?现在,如果我有两个指定为参数的文本文件,并使用>将其输入到一个新文件中,我会得到一个文件,它只是两个文件的串联。@user1566200:U更新。它不再是一行程序,但仍然非常简单。太棒了,去试试吧。你如何指定*的基础文件数?现在,如果我有两个指定为参数的文本文件,并使用>将其输入到一个新文件中,我会得到一个文件,它只是两个文件的串联。@user156620:更新。它不再是一行了,但仍然很简单。