我有一个2000行和1列的文件
1007_s_at1
1007_s_at2
1007_s_at3
1007_s_at4
1007_s_at5
1007_s_at6
1007_s_at7
1007_s_at8
1007_s_at9
1007_s_at10
如上所示,我想删除“at”之后的最后一个数值。原则上,最后一个数字应该被截断。
我尝试过拆分它们然后重新启动它,但它只是使问题复杂化,我远离回答。
请你用bash或shell或python或perl来推荐一些东西来解决这个问题。
需要如下输出
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
1007_s_at
谢谢
答案 0 :(得分:5)
使用 Perl :
perl -p -e "s/\d+$//" input.txt > output.txt
答案 1 :(得分:3)
sed -i -e 's/[[:digit:]]*$//' filename
答案 2 :(得分:3)
只需将string.digits
传递给.rstrip()
即可删除字符串右侧的数字:
import string
with open('inputfile') as infile, open('outputfile') as outfile:
for line in infile:
outfile.write(line.rstrip().rstrip(string.digits) + '\n')
答案 3 :(得分:1)
如果只有最后的数字发生变化,你可能会拼接:
>>> a = '1007_s_at1'
>>> a[0:9]
'1007_s_at'
答案 4 :(得分:1)
<强>的Python 强>
从最后删除所有数字。
>>> "1007_s_at10".rstrip('01234567890')
'1007_s_at'
答案 5 :(得分:0)
如果您使用的是Linux或Unix,那么简单的单线解决方案就是:
perl -i.bak -pe 's/\d+$//g' file.txt
如果是Windows:
perl -i.bak -pe "s/\d+$//g" file.txt
如果您已经知道它正在做什么那么好,否则,用非常简单的术语来说,-i
切换.bak
会先创建file.txt
的备份,并将其命名为{ {1}}。
然后file.txt.bak
选项将循环遍历文件中的条目,并在-p
删除最后的数字后在file.txt
中打印/保存输出。
答案 6 :(得分:0)
还没有人建议使用bash解决方案:
shopt -s extglob
while read line; do
echo "${line%%*([0-9])}"
done < filename