我正在尝试使用awk
/ sed
/ forloop
/ foreach
组合特定位置的两个文件...以最简单的方式。
首先,我的文件1有...
#
#
>
#
#
>
等。
在我的第二个文件中,我只有数字(与其他文件中的>一样多的数字)。
Num1
Num2
Num3
等等......
我希望在每个>之后按顺序在文件2中插入数字。在第一个文件中,例如......
#
#
> Num1
#
#
> Num2
谢谢!
答案 0 :(得分:1)
短 awk
解决方案:
awk '/^>/{ r=$0; if ((getline < "file2") > 0) $0=r OFS $0 }1' file1
示例输出:
#
#
> Num1
#
#
> Num2
答案 1 :(得分:0)
让我们考虑一下我们需要与您的条件合并的file1
和file2
:
$ more file1 file2
::::::::::::::
file1
::::::::::::::
#
#
>
#
#
>
#
#
>
::::::::::::::
file2
::::::::::::::
98
58
348
然后您可以使用以下awk
命令:
$ awk '/^#/{print $0; next}/^>/{printf "> "; getline < "file2" ; print $0}' file1
<强>输出:强>
#
#
> 98
#
#
> 58
#
#
> 348
说明:
/^#/{print $0; next}
开头的行,#
只需打印并转到下一行/^>/{printf ">"; getline < "file2" ; print $0}
当一行以>
开头时,您打印>
后跟getline
语句file2
提取的数字。最后但并非最不重要的是,只需将命令的输出重定向到文件,以便通过重定向运算符>
保存结果:
$ awk '/^#/{print $0; next}/^>/{printf "> "; getline < "file2" ; print $0}' file1 > result
遵循Sundeep建议,您甚至可以使用更紧凑的命令:
awk '/^>/ && (getline num < "file2")==1{$0 = $0 OFS num} 1'
对于以>
开头的行,您调用getline
语句从file2
获取下一行,并将内容存储到num
变量getline
如果成功,将返回1
,这将触发scoper {$0 = $0 OFS num}
,在其中您自行替换行内容,然后是您连接的output field separator
(默认为空格)存储在num
变量中的值。最后但并非最不重要的是,1
命令末尾的awk
用于触发$0
中包含的整个修改行的默认打印。
答案 2 :(得分:0)
<h1>Page header</h1>
<article>
<h2>This is my article</h2>
<p>The content of my page would go here</p>
</article>
<footer>
<nav class="pagination">
Page:
<a onclick="funPage(1)" href="#">1</a>
<a onclick="funPage(2)" href="#">2</a>
<a onclick="funPage(3)" href="#">3</a>
<a onclick="funPage(4)" href="#">4</a>
<a onclick="funPage(5)" href="#">5</a>
</nav>
</footer>
sed命令sed -r "/^>/R file2" file1 | sed -r "/>/d;s/^([^#])(.*)/> \1\2/"
从file2读取一行,总是在触发时。但它会产生一些中间输出,需要进行调整(由管道后面的sed完成) - 这是以前的中间结果:
R file2
第二个sed调用只是标准和sed vodoo:
#
#
>
Num1
#
#
>
Num2
删除只是“&gt;”的行并替换行,而不是以前面带有“&gt;”的#开头。 (\ 1 = N,\ 2 = umX)
sed -r "/>/d;s/^([^#])(.*)/> \1\2/"
这是另一种方式,几乎相同:
#
#
> Num1
#
#
> Num2
第二个sed命令,第2部分只匹配不以#开头的行(并且只包括#),用前面的“&gt;”替换它们。
第三种方法是用修改后的版本替换文件2,该版本已在每行前面包含“&gt;”。
答案 3 :(得分:0)
不需要getline:
awk 'NR==FNR{a[NR]=$0; next} {print $0 (/>/ ? " " a[++c] :"")}' file2 file1