我有一个特定的 txt 文件作为输入,其中有不同类型的分隔符("one or more blanck space"
、|
和|||
)。我想用 替换所有这些分隔符,,
并在输入中删除所有()
。下面是输入和预期输出的示例。
输入.txt
Rec Ligand Rank S-Score | MIF ( H O N1 CRY ) | dSolv | Etot ( ELJint ELJext Q ) | POSI (Best Norm) ??? Pen | WScore ( Bridge HExp DAOvlp HOvlp ) WScore_PosiNorm | W_ddG ( W_ddH W_dtdS ) DG_Disp-Per DG-disp DDG-pert ??? Col-DispWat Num-DispWat Col-DispWat Num-DispWat Col-DispWat Num-DispWat DispWat ||| POSIapprox POSIapprox_Norm ||| POSIwat
A2a1071_PEP_REC_prep 4a_001 1 Scores: 92.535 | 0.64 ( 0.98 0.82 0.38 0.77 ) | 0.64 | 0.32 ( 0.00 0.16 0.16 ) | 65.42 ( 0.00 51.645 ) 51.89 Pen: 0.00 ||| 2.43 ( 1.67 0.00 0.15 0.62 ) 30.287 | 6.559 ( 6.555 0.004 ) | 7.155 ( 13.760 6.605 ) || -0.387 || (R 1 Y 2 B 0) ||| 117.244 77.134 || 74.52
预期输出.txt
Rec,Ligand,Rank,S-Score,MIF,H,O,N1,CRY,dSolv,Etot,ELJint,ELJext,Q,POSI,Best,Norm,???,Pen,WScore,Bridge,HExp,DAOvlp,HOvlp,WScore_PosiNorm,W_ddG,W_ddH,W_dtdS,DG_Disp-Per,DG-disp,DDG-pert,???,Col-DispWat,Num-DispWat,Col-DispWat,Num-DispWat,Col-DispWat,Num-DispWat,POSIapprox,POSIapprox_Norm,POSIwat
A2a1071_PEP_REC_prep,4a_001,1,92.535,0.64,0.98,0.82,0.38,0.77,0.64,0.32,0,0.16,0.16,65.42,0,51.645,51.89,Pen:0,2.43,1.67,0,0.15,0.62,30.287,6.559,6.555,0.004,7.155,13.76,6.605,-0.387,R,1,Y,2,B,0,117.244,77.134,74.52
我使用迭代脚本(如下)做到了这一点,它有效,但是有没有另一种方法可以用一个命令完成所有操作?
我的脚本:
cat heading.txt| tr -s '[:blank:]' ',' > 1.txt
cat 1.txt| tr -s '|' ',' > 2.txt
cat 2.txt| tr -s '(' ',' > 3.txt
cat 3.txt| tr -s ')' ',' > exptected_output.txt
答案1
您可以将管道连接在一起。
因此你的命令看起来应该是这样的:
cat heading.txt| tr -s '[:blank:]' ',' | tr -s '|' ',' | tr -s '(' ',' | tr -s ')' ',' > exptected_output.txt
但更好的是,tr
可以同时替换多个字符串。所以这是一个更好的解决方案:
cat heading.txt| tr -s '[:blank:]|()' ',' > exptected_output.txt