0

私は常にこのように終わる(さまざまな行番号の)ファイルのグループを持っています

[ molecules ]
; Compound        #mols
Protein_chain_A     1
SOL             12161

bashを使用して実行したいのは、SOLの値から2を減算し、ファイル内にそのような新しい行を追加することです(理想的には、SOLとCLの間に2つのタブがあり、それぞれの値があります)。

SOL       12159
CL        2

私はawkとsedで少しずつ試しましたが、それは私を悩ませ続けます。Pythonのような他のものを使用するのが最善でしょうか?

4

4 に答える 4

1

私は自分が最もよく知っている言語を使用します(私の場合はPerl)。しかし、bashとそのツールも役に立ちます。

{
    head -n-1 "$file"
    read sol num < <(tail -n1 "$file")
    echo $sol$'\t'$((num-2))
    echo CL$'\t'2
} > "$file".new
mv "$file".new $file
于 2012-05-21T13:11:17.050 に答える
1
awk '/^SOL/ {
        match($0, /^SOL([[:space:]]+)/, a);
        num = $2;
        sub(num "$", num - 2);
        print;
        print "CL" a[1] "2";
        next
    }
    {
        print
    }' inputfile
于 2012-05-21T13:13:52.730 に答える
1

これはあなたのために働くかもしれません(GNU sed):

sed -i '$!b;s/\(\S*\)\s*\(\S*\).*/printf "%s\\t\\t%d\\nCL\\t\\t2\\n" "\1" "$((\2-2))"/e' file
于 2012-05-21T13:44:12.787 に答える
0

このシンプルなワンライナーを試すことができます

awk '{if ( $0 !~ "SOL" ){printf "%s\n",$0}else{printf "%s\t\t%d\nCL\t\t2\n",$1,$2-2}}' filename
于 2012-05-21T18:12:27.117 に答える