我有一个8行单个星号的文件。我有4个文本文件,每个文件有两行数字。我想为每个文本文件创建一个新文件,其中行号i + 2和i + 3被文本文件的内容替换。例如:
File1将是:
1 5 7 8
2 4 5 6
我想将其转换为:
1 5 7 8
2 4 5 6
*
*
*
*
*
*
File2将转换自:
6 5 6 7
8 9 0 9
到:
*
*
6 5 6 7
8 9 0 9
*
*
*
*
有没有办法遍历目录中的文本文件,转换上面的每个文本文件?
谢谢!
更新:也许这会更好地解释它:
基本上我有n个文本文件,每个文件只有两行数字。我想循环浏览文本文件,将每个文本文件转换为另一个文本文件,其中有n x 2行数,第一个文本文件的值占用第1行和第1行。 2,其余行是*。第二个文本文件将有n x 2行,但第3行和第4行是文件值,其余为*。第三个文件有n×2行,6&第7行填充其值,其余为*,依此类推。
答案 0 :(得分:1)
不确定如何在shell中轻松完成此操作,但GNU awk具有一些非常简单的功能。
<强> parse.awk 强>
BEGINFILE {
outfile = ARGV[ARGIND] ".new"
for(i=1; i<ARGIND; i++)
print "*\n*" > outfile
}
{ print > outfile }
ENDFILE {
for(i=1; i<ARGC-ARGIND; i++)
print "*\n*" > outfile
close(outfile)
}
像这样运行:
gawk -f parse.awk File*
ARGV是一个数组,包含输入文件的名称。 ARGIND是当前正在处理的文件的ARGV索引,ARGC是ARGV的长度,即给定的参数数量。
BEGINFILE和ENDFILE块在开始/完成文件处理时执行,因此它们是您方便的钩子。
答案 1 :(得分:0)
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