gawkディレクトリのファイルのリストを解析し、新しいフォルダに保存します。

gawkディレクトリのファイルのリストを解析し、新しいフォルダに保存します。

こんにちは、次のコードがあります

for i in *.dssp ; do
   gawk 'BEGIN{ FIELDWIDTHS = "5 5 1 1 4 1 *"} $4 == "A" {s=s$6} END {print s}' | tr "[HGI]" "H" | tr "[BE]" "E" | tr "[TS ' ']" "C" 
done 

特定の.dsspファイルを使用してシェルからコードを呼び出すことで正常に実行できますが、これらのファイルのディレクトリがあり、すべてのファイルを繰り返し出力を保存するために必要です。これは複数の文字(fastaなど)を新しいファイルに追加し、そのIDを抽出します。ここでどこに行くべきかわかりません。

答え1

ここではawkだけを使います。

gawk -v map='[GI]>H,B>E,[TS ]>C' '
BEGIN  { nrf=split(map, tmp, /[,>]/); FIELDWIDTHS="5 5 1 1 4 1 *" }

$4=="A"{ buf= buf $6 }

ENDFILE{
    for(i=1; i<=nrf; i+=2) gsub(tmp[i], tmp[i+1], buf);
    print buf >FILENAME".output"; close(FILENAME".output"); buf=""
}' ./*.dssp

ここでは、文字マップ変換を-v map='[GI]>H,B>E,[TS ]>C'awk に変数引数 (コンマ区切りの各文字、各マップグループ間の読みやすさを向上させるためにも使用されます) として渡します。>

次に、BEGIN {}ブロック内でマッピングを次のものから分離します。map変数を一時配列としてtmpそして、これらの合計を区切り文字,として扱います>。また、FIELDWIDTHS(GNU awk)を介してフィールドを定義します。

次に、4番目のフィールドが「A」文字と同じであることを確認し、そうであれば追加モードで各行の6番目のフィールドをバッファリングします。buff変える

各入力ファイルの末尾でENDFILE {}ブロック(GNU awk)を処理します。ここでは、文字マップのペアを繰り返し、左の文字を右の文字に置き換えます。buff変更可能後で更新された内容を印刷します。buff入力と同じ名前の出力ファイルにコンテンツを追加し、「fileName.output」などのサフィックスを追加します。

関連情報