使用多个分隔符进行文件操作

使用多个分隔符进行文件操作

我有一个特定的 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

相关内容