Sed 如何按升序排列行
我有一个包含200个pdb文件的文件夹。我想根据第6列按升序排列pdb文件的atom行。我想为文件夹中的每个pdb文件进行适当的编辑。谢谢你的帮助Sed 如何按升序排列行,sed,awk,Sed,Awk,我有一个包含200个pdb文件的文件夹。我想根据第6列按升序排列pdb文件的atom行。我想为文件夹中的每个pdb文件进行适当的编辑。谢谢你的帮助 ATOM 81 N ASN A 248 38.791 -16.708 12.507 1.00 52.04 N ATOM 82 CA ASN A 248 39.443 -17.018 11.206 1.00 54.49 C ATOM 422 C
ATOM 81 N ASN A 248 38.791 -16.708 12.507 1.00 52.04 N
ATOM 82 CA ASN A 248 39.443 -17.018 11.206 1.00 54.49 C
ATOM 422 C SER A 205 70.124 -29.955 8.226 1.00 55.81 C
ATOM 423 O SER A 205 70.901 -29.008 8.438 1.00 46.60 O
ATOM 303 N MET A 231 61.031 -38.086 -3.054 1.00 52.32 N
ATOM 304 CA MET A 231 60.580 -39.074 -4.047 1.00 64.11 C
ATOM 392 C GLU B 65 23.248 10.071 -7.321 1.00 48.26 C
ATOM 393 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 394 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
期望输出
ATOM 392 C GLU B 65 23.248 10.071 -7.321 1.00 48.26 C
ATOM 393 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 394 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 422 C SER A 205 70.124 -29.955 8.226 1.00 55.81 C
ATOM 423 O SER A 205 70.901 -29.008 8.438 1.00 46.60 O
ATOM 303 N MET A 231 61.031 -38.086 -3.054 1.00 52.32 N
ATOM 304 CA MET A 231 60.580 -39.074 -4.047 1.00 64.11 C
ATOM 81 N ASN A 248 38.791 -16.708 12.507 1.00 52.04 N
ATOM 82 CA ASN A 248 39.443 -17.018 11.206 1.00 54.49 C
使用排序
sort -n -k 6 inputfile
-n
执行数字排序,而-k
通过键告诉排序
编辑:对于就地排序,请使用-o
选项:
sort -n -k 6 inputfile -o inputfile
使用排序
sort -n -k 6 inputfile
-n
执行数字排序,而-k
通过键告诉排序
编辑:对于就地排序,请使用-o
选项:
sort -n -k 6 inputfile -o inputfile
我使用一个散列,其中它的键将是第6个字段加上一个计数器,该计数器将增加末尾附加的每一行。这样可以避免覆盖重复条目并保持稳定的顺序。然后使用
asorti()
函数按第6个字段排序并打印原始数组的每一行
script.awk的内容
:
{
++n
data[ $6 _ n ] = $0;
}
END {
asorti( data, mod_data, "@ind_num_asc" )
l = length( data )
for ( i = 1; i <= l; i++ ) {
print data[ mod_data[i] ]
}
}
这将产生:
ATOM 392 C GLU B 65 23.248 10.071 -7.321 1.00 48.26 C
ATOM 393 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 394 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 422 C SER A 205 70.124 -29.955 8.226 1.00 55.81 C
ATOM 423 O SER A 205 70.901 -29.008 8.438 1.00 46.60 O
ATOM 303 N MET A 231 61.031 -38.086 -3.054 1.00 52.32 N
ATOM 304 CA MET A 231 60.580 -39.074 -4.047 1.00 64.11 C
ATOM 81 N ASN A 248 38.791 -16.708 12.507 1.00 52.04 N
ATOM 82 CA ASN A 248 39.443 -17.018 11.206 1.00 54.49 C
我使用一个散列,其中它的键将是第6个字段加上一个计数器,该计数器将增加末尾附加的每一行。这样可以避免覆盖重复条目并保持稳定的顺序。然后使用
asorti()
函数按第6个字段排序并打印原始数组的每一行
script.awk的内容
:
{
++n
data[ $6 _ n ] = $0;
}
END {
asorti( data, mod_data, "@ind_num_asc" )
l = length( data )
for ( i = 1; i <= l; i++ ) {
print data[ mod_data[i] ]
}
}
这将产生:
ATOM 392 C GLU B 65 23.248 10.071 -7.321 1.00 48.26 C
ATOM 393 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 394 O GLU B 65 24.465 10.200 -7.158 1.00 46.53 O
ATOM 422 C SER A 205 70.124 -29.955 8.226 1.00 55.81 C
ATOM 423 O SER A 205 70.901 -29.008 8.438 1.00 46.60 O
ATOM 303 N MET A 231 61.031 -38.086 -3.054 1.00 52.32 N
ATOM 304 CA MET A 231 60.580 -39.074 -4.047 1.00 64.11 C
ATOM 81 N ASN A 248 38.791 -16.708 12.507 1.00 52.04 N
ATOM 82 CA ASN A 248 39.443 -17.018 11.206 1.00 54.49 C
+1.替代形式:
排序-k6n,6输入文件
。实际上,它不进行就地编辑。请尝试perl-i
,它确实可以。另一种替代方法:sort-nk6 inputfile
@devnull谢谢您的回答。我想在适当的地方编辑多个文件。如何更改您的代码?谢谢!我有一个包含200个pdb文件的文件夹。此代码不适用于多个文件。对于多个文件,您可以编写一个脚本:#/bin/bash set--*/regex_filename/for FILE do sort-n-k 6$FILE-o$FILE done
+1。替代形式:排序-k6n,6输入文件
。实际上,它不进行就地编辑。请尝试perl-i
,它确实可以。另一种替代方法:sort-nk6 inputfile
@devnull谢谢您的回答。我想在适当的地方编辑多个文件。如何更改您的代码?谢谢!我有一个包含200个pdb文件的文件夹。此代码不适用于多个文件。对于多个文件,您可以编写一个脚本:#/bin/bash set--*/regex_filename/for FILE do sort-n-k 6$FILE-o$FILE done
@user2374784:您将需要GNU版本。否则我认为asorti()
将无法工作。@user2374784:您将需要GNU版本。否则我认为asorti()
将无法工作。