我有一些文件名如下:
d_Ca-1_O_7.dat
d_Ca-1_O_8.dat
d_Ca-1_O_14.dat
d_Ca-1_O_16.dat
d_Ca-1_O_10.dat
在每个文件中,我都有这种结构:
abcA_BCdef 1 G 1 2.4733 4.6738 7 O 0 0 0
ghiJ_KLmno 1 P 1 2.4811 4.6887 7 O 0 0 0
pqrS_TLxyz 1 L 1 2.4872 4.7000 7 O 0 0 0
...
(the same scheme)
我想制作一个覆盖这些文件的bash脚本,例如:
for {i = 7, 8, 14, 16} in d_Ca-1_O_i.dat
并将每个文件转换为以下格式:
A.BC 2.4733 # 0 0 0
J.KL 2.4811 # 0 0 0
S.TL 2.4872 # 0 0 0
...
(the same scheme)
在每一行中:
1)第一列:我们减少开头的相同位,结尾的相同位
2)第一栏:将_
替换为.
2)删除第2,第3,第4,第6,第7,第8列
4)在第9列的每一行的开头添加#
我非常感谢一些帮助
答案 0 :(得分:1)
假设您的输入是制表符分隔符,这是一个GNU Awk脚本:
<强> script.awk:强>
BEGIN { OFS=FS="\t"}
{ strange = gensub(/^.*(.)_(..).*$/,"\\1.\\2","",$1)
print strange, $5, "#" $9 }
在bash的for循环中使用它:awk -f script.awk yourfile
E.g。类似的东西:
for i in 7 8 14 16
do
awk -f script.awk "d_Ca-1_O_${i}.dat"
done
对于第一个字段的转换,脚本左边有一个字符,下划线右边有两个字符。下划线转换为一个点,第一个字段中的所有其他字符都被丢弃。