2017-10-31 11 views
-1

私のファイルリストは以下のようなものです:awkコマンドループ

12as.pdb 
132l.pdb 
135l.pdb 
13pk.pdb 

私はこのようなコマンドを持っている:私は以下のように、このコマンドのペアごとに生成するループのbashを書きたい

awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' file1 file2 

awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 132l.pdb 

    awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 135l.pdb 

    awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' 12as.pdb 13pk.pdb 

誰でもそのbashスクリプトを書いて、私を助けてくれますか?

+2

ようこそやっていることを知っている限りスタックオーバーフロー!スタックオーバーフローはコード作成サービスではありません。新しいコーダーをサポートしてくれることを常に嬉しく思っています*しかし、あなたはまず自分自身を助ける必要があります。 : - )*自分でコードを書くことが期待されます。 [最小限で完全で検証可能なサンプルを作成する方法](https://stackoverflow.com/help/mcve)をお読みください。 –

答えて

1

これは、起動時にそれを受け取り、それがどのように進むかを教えてくれるスクリプトの例です。あなたがサンプルInput_file(s)と出力に関する多くの情報を私たちに知らせていないので、あなたの質問に基づいてここに答えがあります、awksを何度も作成しても、関数を作成することができました。

#!/bin/bash 
CHECK(){ 
awk 'FNR==NR{a[$1$2]=$3;next} ($1$2 in a) {print $1,$2,a[$1$2],$3}' "$1" "$2" 
} 

CHECK 12as.pdb 132l.pdb 
CHECK 12as.pdb 135l.pdb 
CHECK 12as.pdb 13pk.pdb 

だからロジックは、関数がawkコードを入れて作成し、それを引数としてファイル名を渡し、あなたが渡したい別のファイル名で、その関数を呼び出すです。

+0

@down voter:投票の理由を教えてください。 – RavinderSingh13

+1

私はdownvoteをしませんでしたが、編集履歴から見ると、Cスタイルの引数をbash関数に渡していたようです。 – Inian

+0

@Inian、ええ、私はCとbashの構文と混同していますが、私のロジックは同じで、その後BASHで編集しました:) – RavinderSingh13

0

のみ2番目のファイルは可変であるので、あなたにも、bashのループに

for f in {1321,1351,13pk}.pdb; 
do 
    awk '....' 12as.pdb $f; 
done 

を行うawk[$1,$2]($1,$2) in aから$1$2 in aへのスクリプトの変更[$1$2]あなたはあなたに