猿问

查找和替换特定列中的破折号

我有一个包含五列的文件。


文件1看起来像:


1111    1111    exm-IND1-200449980  I   I


1111    1111    exm-IND1-201453487  I   -


1111    1111    exm-IND1-85310248   I   I


1111    1111    exm-IND10-102817747 D   D


1111    1111    exm-IND10-18329639  -   D


1111    1111    exm-IND10-27476467  I   I


1111    1111    exm-IND10-27727540  D   -

我只想删除第-4列和第5列,并在这些情况下替换-为0。我一直在使用以下代码行:


sed '/^\([^\t]*\t[^\t]*\t[^\t]*\)\t-\t-\(.*\)/ s//\1\t0\t\2/' file1 > newfile

解决问题,但感觉这有些笨拙。有没有人对此问题有更简洁的建议?因为我会遇到很多。


预先感谢您的帮助。


牧羊人nacy
浏览 168回答 4
4回答

PIPIONE

Awk是一个更好的选择:awk '{sub("-","0",$4); sub("-","0",$5); print}'

千万里不及你

GNU sedsed -r ':k;s/-(\s*\S*)$/0\1/g;tk' file..输出:1111 1111 exm-IND1-200449980 II1111 1111 exm-IND1-201453487我01111 1111 exm-IND1-85310248 II1111 1111 exm-IND10-102817747 DD1111 1111 exm-IND10-18329639 0 D1111 1111 exm-IND10-27476467 II1111 1111 exm-IND10-27727540 D 0

炎炎设计

这就是你想要的:$ awk '$4=="-"{$4=0}$5=="-"{$5=0}{$1=$1}1' OFS='\t'  file1111    1111    exm-IND1-200449980      I       I1111    1111    exm-IND1-201453487      I       01111    1111    exm-IND1-85310248       I       I1111    1111    exm-IND10-102817747     D       D1111    1111    exm-IND10-18329639      0       D1111    1111    exm-IND10-27476467      I       I1111    1111    exm-IND10-27727540      D       0
随时随地看视频慕课网APP

相关分类

Python
我要回答