我有一个有五列的文件。
文件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
解决这个问题,但觉得这有些相当笨重。有没有人对这个问题有更简洁的建议?因为我将遇到很多。
提前感谢您的帮助。
答案 0 :(得分:4)
Awk是一个更好的选择:
awk '{sub("-","0",$4); sub("-","0",$5); print}'
(已更新以反映您更新的问题)
答案 1 :(得分:3)
sed -r ':k;s/-(\s*\S*)$/0\1/g;tk' file
..输出:
1111 1111 exm-IND1-200449980 I I 1111 1111 exm-IND1-201453487 I 0 1111 1111 exm-IND1-85310248 I I 1111 1111 exm-IND10-102817747 D D 1111 1111 exm-IND10-18329639 0 D 1111 1111 exm-IND10-27476467 I I 1111 1111 exm-IND10-27727540 D 0
答案 2 :(得分:2)
awk '{gsub(/-/,"0",$4);gsub(/-/,"0",$5)}1' test.in | column -t
column
是为了保持良好的格式,如果你不需要它就可以删除它。
答案 3 :(得分:2)
这就是你想要的:
$ awk '$4=="-"{$4=0}$5=="-"{$5=0}{$1=$1}1' OFS='\t' file
1111 1111 exm-IND1-200449980 I I
1111 1111 exm-IND1-201453487 I 0
1111 1111 exm-IND1-85310248 I I
1111 1111 exm-IND10-102817747 D D
1111 1111 exm-IND10-18329639 0 D
1111 1111 exm-IND10-27476467 I I
1111 1111 exm-IND10-27727540 D 0
答案 4 :(得分:1)
使用awk
awk '$4=="-"{$4=0}$5=="-"{$5=0}1' inputFile
答案 5 :(得分:-1)
在Python中,您可以执行以下操作:
file1 = [line.strip().split() for line in open('file1')]
for line in file1:
line[2] = line[2].replace('-','')
print file1