Sru*_*.B. 5 command-line bash awk text-processing
我有一个大文件 input.dat,如下所示。
kpoint1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
kpoint2 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
Run Code Online (Sandbox Code Playgroud)
我需要将文件拆分为 2 个较小的文件,如下所示
kpoint1.dat
:
kpoint1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
Run Code Online (Sandbox Code Playgroud)
和kpoint2.dat
:
kpoint1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
Run Code Online (Sandbox Code Playgroud)
我写了一个小脚本来做到这一点。脚本如下所示。
for j in {1..2}
do
awk '$1=="kpoint'$j'" {for(i=1; i<=3; i++){getline; print}}' tmp7 >kpoint'$j'.dat
done
Run Code Online (Sandbox Code Playgroud)
该脚本创建具有所需名称的输出文件。但是所有文件都是空的。任何人都可以帮我解决这个问题吗?
这完全可以通过以下方式完成awk
:
$ awk '$1 ~ /kpoint[0-9]/ { file = $1 ".dat" } {print > file}' file
$ head kpoint*
==> kpoint1.dat <==
kpoint1 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
==> kpoint2.dat <==
kpoint2 : 0.0000 0.0000 0.0000
band No. band energies occupation
1 -52.8287 2.00000
2 -52.7981 2.00000
3 -52.7981 2.00000
Run Code Online (Sandbox Code Playgroud)
Awk 还支持> file
重定向,但有一些细微的差别(有关更多信息,请参阅GNU awk 手册)。
归档时间: |
|
查看次数: |
3202 次 |
最近记录: |