동일한 디렉토리에서 많은 txt 파일을 작동해야 합니다. 각 파일은 동일한 형식 이름(Pocket_????????.pdb_OUTPUT.txt) 및 동일한 내부 구조입니다.
다음은 예시입니다(파일 이름: Pocket_001_1b47_A.pdb_OUTPUT.txt).
Input PDB-File: /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1b47_A/1b47_biounit1_1b47_A.pdb
Pocket File: /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1b47_A/Pocket_001_1b47_A.pdb
Pocket Surface: 649.1
Hydrophobic Surface: 0.0 ( 0.0%)
Polar Surface: 441.0 (67.9%)
Acceptor Surface: 309.9 (47.7%)
Donnor Surface: 399.9 (61.6%)
Exposed To Solvent: 186.8 (28.8%)
Pocket Volume: 1255.9
Hydrophobic Volume: 0.0 ( 0.0%)
Hydrophilic Volume: 229.1 (18.2%)
Flexible Volume: 134.2 (10.7%)
Rigid Volume: 120.2 ( 9.6%)
Buried Volume(B): 48.5 ( 3.9%)
Buried Volume(A): 0.0 ( 0.0%)
출력을 얻어야 합니다(Pocket_????????.pdb_OUTPUT_2.txt) 원본 파일의 이름과 각 줄에 있는 값을 원본 파일에 보고된 순서대로 쉼표로 구분하여 보고합니다.
예. 출력(Pocket_001_1b47_A.pdb_OUTPUT_2.txt):
Pocket_001_1b47_A.pdb_OUTPUT.txt,649.1,0.0,(0.0%),441.0,(67.9%),309.9,(47.7%),399.9,(61.6%),186.8,(28.8%),1255.9,0.0,( 0.0%),229.1,(18.2%),134.2,(10.7%),120.2,( 9.6%),120.2,( 9.6%),0.0,( 0.0%)
각 파일을 처리하고 각 파일에 대한 상대 출력 파일을 가져오려면 루프가 필요하다고 생각합니다.
누구든지 나를 도와줄 수 있나요? 감사합니다! ! !
답변1
노력하다,
for f in Pocket_??????????.pdb_OUTPUT.txt; do
output=$(
awk -F: 'NR>2{gsub("[[:blank:]]","",$2);print $2;}' "$f" \
| sed 's/(/\n(/' \
| paste -sd,
)
printf '%s,%s\n' "$f" "$output" > "${f%.*}_2.txt"
done
설명하다:
- 루프 파일 사용
for f in ...; do ... done
루프 내에서 체인은 ...
awk -F: 'NR>2{gsub("[[:blank:]]", "", $2); print $2;}'
처음 두 줄을 삭제하고 모든 공백과 탭을 제거합니다$2
.sed
새 줄 추가(
paste -sd,
이전 내용을 csv로 만들기
그 다음에
"$f"
다음 명령을 사용하여 파일 이름과 함께 넣으십시오.printf
- 쓰기
"${f%.*}_2.txt"
(삭제.txt
및 추가_2.txt
)
답변2
루프를 구현하지 않고도 이 작업을 수행할 수 있습니다. 와일드카드가 포함된 파일을 awk
명령에 전달하면 됩니다.
awk -F':' '{$1 =""; sub(/^[ \t]+/, "");
sub(/[ \t]+$/, "");
sub(/[ \t]+/,",");
printf("%s%s",FNR==1?"":",",$1) >> substr(FILENAME, 0, length(FILENAME)-4)"_2.txt"}' Pocket_*.pdb_OUTPUT.txt
설명하다
- 먼저 콜론(
$1 =""
) 앞의 요소를 제거하고sub(/^[ \t]+/, "")
나머지 항목 앞( )과 뒤의 공백( )을 제거합니다.sub(/[ \t]+$/, "")
- 요소 사이의 공백은
sub(/[ \t]+/,",")
쉼표( )로 대체됩니다. - 마지막으로 수정된 입력을 사용하여 요소를 올바른 파일에 출력하고 요소가
FILENAME
특정 파일의 첫 번째 줄이 아닌 경우 요소 사이에 쉼표를 추가합니다.