通过使用 awk、sed 或 perl 在指定列中给出范围来移除或删除特定字符
To remove or delete particular character by giving their range in a specified column using awk, sed or perl
我只需要从第 1 列“_p1.pdb_________________
”中删除特定字符(例如:从第 3 列的中间指定范围,如 5 到 10 个章程)。我试过这个命令
sed 's/_p.*//' test
但它会删除所有从 _p 开始的东西。我必须删除 38690797 行。那么任何人都可以给出有效的命令来做到这一点吗?
我已经检查了之前所有的问题,没有一个能完全满足我的要求。
示例输入文件:
EAZ51036_p1.pdb_________________ SSPP00000432782.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
BBX51096_p1.pdb_________________ EEEP00000435284.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
CCZ58032_5j3b_p3.pdb____________ NNNP00000343764.6_192_p1.pdb____ NULL____ NULL____ ________ ________ ________
WWW25032_5j3b_p6.pdb____________ GGGP00000343764.6_192_p2.pdb____ 0.866667 0.070452 7750 630 546
EEX51032_5j3b_p3.pdb____________ FFFP00000343764.6_192_p3.pdb____ NULL____ NULL____ ________ ________ ________
EEX51032_p9.pdb_________________ RRRP00000436941.1_1_p1.pdb______ 0.807338 0.807338 11175 11175 9022
期望的输出:
EAZ51036 SSPP00000432782.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
BBX51096 EEEP00000435284.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
CCZ58032 NNNP00000343764.6_192_p1.pdb____ NULL____ NULL____ ________ ________ ________
WWW25032 GGGP00000343764.6_192_p2.pdb____ 0.866667 0.070452 7750 630 546
EEX51032 FFFP00000343764.6_192_p3.pdb____ NULL____ NULL____ ________ ________ ________
EEX51032 RRRP00000436941.1_1_p1.pdb______ 0.807338 0.807338 11175 11175 9022
尝试跟随 awk 一次。
awk '{sub(/_.*_/,"",)} 1' Input_file
说明: 我在这里使用名为 sub 的开箱即用的函数进行替换。它适用于 sub(regex_which_we_want_to_change_in_lines,new regex/variable,variable/line)
。所以在这里我在 </code>(第一个字段)<code>,
中给出 _.*_
表示从 _.*
(涵盖所有内容直到 _ 为 NULL。然后提到 1
表示, awk
在 condition then action
的方法上工作,所以在这里我将条件设置为 TRUE 并且不提及任何操作,因此默认情况下会发生打印操作,这将打印当前(edited/non-edited)行Input_file.
使用 sed:
sed 's/_[^ ]*//' file
我只需要从第 1 列“_p1.pdb_________________
”中删除特定字符(例如:从第 3 列的中间指定范围,如 5 到 10 个章程)。我试过这个命令
sed 's/_p.*//' test
但它会删除所有从 _p 开始的东西。我必须删除 38690797 行。那么任何人都可以给出有效的命令来做到这一点吗?
我已经检查了之前所有的问题,没有一个能完全满足我的要求。
示例输入文件:
EAZ51036_p1.pdb_________________ SSPP00000432782.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
BBX51096_p1.pdb_________________ EEEP00000435284.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
CCZ58032_5j3b_p3.pdb____________ NNNP00000343764.6_192_p1.pdb____ NULL____ NULL____ ________ ________ ________
WWW25032_5j3b_p6.pdb____________ GGGP00000343764.6_192_p2.pdb____ 0.866667 0.070452 7750 630 546
EEX51032_5j3b_p3.pdb____________ FFFP00000343764.6_192_p3.pdb____ NULL____ NULL____ ________ ________ ________
EEX51032_p9.pdb_________________ RRRP00000436941.1_1_p1.pdb______ 0.807338 0.807338 11175 11175 9022
期望的输出:
EAZ51036 SSPP00000432782.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
BBX51096 EEEP00000435284.1_1_p1.pdb______ 0.834183 0.812304 11175 11476 9322
CCZ58032 NNNP00000343764.6_192_p1.pdb____ NULL____ NULL____ ________ ________ ________
WWW25032 GGGP00000343764.6_192_p2.pdb____ 0.866667 0.070452 7750 630 546
EEX51032 FFFP00000343764.6_192_p3.pdb____ NULL____ NULL____ ________ ________ ________
EEX51032 RRRP00000436941.1_1_p1.pdb______ 0.807338 0.807338 11175 11175 9022
尝试跟随 awk 一次。
awk '{sub(/_.*_/,"",)} 1' Input_file
说明: 我在这里使用名为 sub 的开箱即用的函数进行替换。它适用于 sub(regex_which_we_want_to_change_in_lines,new regex/variable,variable/line)
。所以在这里我在 </code>(第一个字段)<code>,
中给出 _.*_
表示从 _.*
(涵盖所有内容直到 _ 为 NULL。然后提到 1
表示, awk
在 condition then action
的方法上工作,所以在这里我将条件设置为 TRUE 并且不提及任何操作,因此默认情况下会发生打印操作,这将打印当前(edited/non-edited)行Input_file.
使用 sed:
sed 's/_[^ ]*//' file