以下awk one-liner允许我根据位置22处的字符分割文件:
awk -v pdb="${file}" -F "" '{close(c);c=$22}{print > pdb"_"c".pdb"}' ${file}.1tmp
我的文件类型为:
ATOM 8911 N SER W 1 -5.412 94.401 12.569 1.00137.46 N
ATOM 8912 CA SER W 1 -4.093 93.709 12.370 1.00137.35 C
ATOM 8913 C SER W 1 -3.115 93.771 13.604 1.00137.27 C
ATOM 8914 O SER W 1 -2.023 93.177 13.570 1.00137.22 O
ATOM 8915 CB SER W 1 -3.417 94.212 11.063 1.00137.29 C
ATOM 1 N ASP X 7 70.244 176.432 -72.598 1.00121.87 N
ATOM 2 CA ASP X 7 70.164 177.938 -72.649 1.00122.11 C
ATOM 3 C ASP X 7 68.705 178.495 -72.843 1.00121.38 C
ATOM 4 O ASP X 7 68.482 179.724 -72.941 1.00121.16 O
ATOM 5 CB ASP X 7 71.128 178.442 -73.745 1.00122.87 C
ATOM 5143 N ASP W 7 -68.623 209.141 -11.831 1.00118.10 N
ATOM 5144 CA ASP W 7 -67.698 209.756 -12.845 1.00118.36 C
ATOM 5145 C ASP W 7 -66.378 210.288 -12.223 1.00118.02 C
ATOM 5146 O ASP W 7 -65.657 211.116 -12.802 1.00118.06 O
ATOM 5147 CB ASP W 7 -68.436 210.840 -13.657 1.00118.67 C
但是,脚本会复制同一文件中第22个位置带有W的所有行,即使它们位于非连续块中也是如此。我想将文件拆分为块,以便包含W(或其他任何字符)的第一个连续块将命名为W1,第二个W2将命名为W2,依此类推。这可以用awk轻松完成,还是应该用计数器或类似的东西进行循环?
答案 0 :(得分:1)
awk -v pdb="${file}" 'BEGIN{f=1} NR==1{n=$5;s[$5]=f} $5!=n{s[$5]=f++ ;n=$5} { print > pdb"_"$5"_"s[$5]".txt" }' ${file}