在awk中传递变量行号和字符串以在文件中打印

在awk中传递变量行号和字符串以在文件中打印,awk,zsh,Awk,Zsh,在zsh中向awk传递一个可变行号和字符串,并让awk在给定行号处插入字符串,语法是什么样的 #!/bin/zsh freq_pols=('10 10' '10 11c' '10 11s' '10 20' '10 21c' '10 21s' '10 22c' '10 22s' '11c 11c' '11c 11s' '11c 20' '11c 21c' '11c 21s' '11c 22c' '11c 22s' '11s 11s' '11s 20' '11s 21c' '11s 21s' '1

在zsh中向awk传递一个可变行号和字符串,并让awk在给定行号处插入字符串,语法是什么样的

#!/bin/zsh

freq_pols=('10 10' '10 11c' '10 11s' '10 20' '10 21c' '10 21s' '10 22c' '10 22s' '11c 11c' '11c 11s' '11c 20' '11c 21c' '11c 21s' '11c 22c' '11c 22s' '11s 11s' '11s 20' '11s 21c' '11s 21s' '11s 22c' '11s 22s' '20 20' '20 21c' '20 21s' '20 22c' '20 22s' '21c 21c' '21c 21s' '21c 22c' '21c 22s' '21s 21s' '21s 22c' '21s 22s' '22c 22c' '22c 22s' '22s 22s')

line_number_O=('8' '11' '14' '17' '20' '23' '26' '29' '32' '35' '38' '41' '44' '47' '50' '53' '56' '59' '62' '65' '68' '71' '74' '77' '80' '83' '86' '89' '92' '95' '98' '101' '104' '107' '110' '113')
line_number_H1=('118' '121' '124' '127' '130' '133')
line_number_H2=('138' '141' '144' '147' '150' '153')

zeros="     0.00000000  0.00000000  0.00000000  0.00000000  0.00000000"


for ((job=1;job<=2.0;job++));
do
output=~/interpolate/grid_1_11_15/aiff/m$job.freq_pol

    for ((i=1;i<=36;i++));
    do
    holder=$line_number_O[i]
    tmp=$(sed -n "${holder}p" $output)

        if [[ $tmp != $freq_pols[i] ]];then
        #echo $tmp
        awk -v n=$holder -v s=$zeros 'NR == n {print s} {print}' $output > test
        awk -v n=$holder -v s=$freq_pols[i] 'NR == n {print s} {print}' $output > test
        fi

    done


done
样本输出:

Title monomer ... monomer
Frequencies   0.5    10
Skip  0
Print nonzero
Molecule  monomer
Site  O1  type  O1
10 10
 7.16240000      7.13140000      6.95110000      6.37710000      5.16380000
 3.41180000      1.74320000      0.64940000      0.12840000      0.00480000
**10 11c**
**0.0000000      0.00000000     0.00000000     0.00000000     0.0000000**
**0.0000000      0.00000000     0.00000000     0.00000000     0.0000000**
10 11s
-0.78000000     -0.77400000     -0.74000000     -0.64100000     -0.45000000
-0.22200000     -0.09000000     -0.03200000     -0.00500000      0.00000000
.....

其中,粗体文本是我希望添加的内容。(粗体文本现在被
**
chars:shelleter包围)

我会选择
sed
。你可以看到一个对你有用的例子。
如果在文件中追加行号时,行号会发生变化,那么您可能应该追加相反的行号。

这是一个好的开始。请编辑以包含示例输出(我们不需要看到36行;-)。而且,并非每次使用
>测试时都覆盖了以前的内容。让第一行中的一行进行测试(将文件输出归零),然后使用
awk…>>测试
。另外,不要使用
test
作为名称,它是shell中的保留字。为什么不
mytest
。祝你好运。祝你演出顺利,谢谢你提供的数据。这可以简化很多,可能就像1 awk程序一样。那对你有用吗?但是如果没有,您应该在dbl引号中遍历并包围所有变量名,比如
awk-vn=“$holder”-vs=“$zeros”'NR==n{print s}{print}'$output>>mytest
;[-)对不起,我明天一大早就要睡觉了:-(.祝你好运。你能用一个主要的
awk
(可能全部)解决方案吗?如果你必须坚持你当前的设计,我不想花时间写它。祝你好运。
Title monomer ... monomer
Frequencies   0.5    10
Skip  0
Print nonzero
Molecule  monomer
Site  O1  type  O1
10 10
 7.16240000      7.13140000      6.95110000      6.37710000      5.16380000
 3.41180000      1.74320000      0.64940000      0.12840000      0.00480000
**10 11c**
**0.0000000      0.00000000     0.00000000     0.00000000     0.0000000**
**0.0000000      0.00000000     0.00000000     0.00000000     0.0000000**
10 11s
-0.78000000     -0.77400000     -0.74000000     -0.64100000     -0.45000000
-0.22200000     -0.09000000     -0.03200000     -0.00500000      0.00000000
.....