1

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

ありがとうございました

4

7 に答える 7

5

Perlの場合:

perl -p -e "s/\d+$//" input.txt > output.txt
于 2012-09-18T15:06:07.913 に答える
3
sed -i -e 's/[[:digit:]]*$//' filename
于 2012-09-18T15:05:55.310 に答える
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')
于 2012-09-18T15:06:03.133 に答える
1

最後の数字だけが変わる場合は、スプライスする可能性があります。

>>> a = '1007_s_at1'
>>> a[0:9]
'1007_s_at'
于 2012-09-18T15:09:15.783 に答える
1

Python

末尾からすべての数字を削除するだけです。

>>> "1007_s_at10".rstrip('01234567890')
'1007_s_at'
于 2012-09-18T15:32:58.570 に答える
0

LinuxまたはUnixを使用している場合、単純なワンライナーソリューションは次のようになります。

perl -i.bak -pe 's/\d+$//g' file.txt

Windowsの場合:

perl -i.bak -pe "s/\d+$//g" file.txt

それが何をしているのかをすでに知っているなら、それ以外の場合は、非常に簡単に言えば、最初にあなたのバックアップを作成し、それに名前を付け-iます。 .bakfile.txtfile.txt.bak

この-pオプションは、ファイル内のエントリをループし、最後の数字を削除したfile.txt後に出力を印刷/保存します。s/\d+$//g

于 2012-09-18T19:06:18.673 に答える
0

まだ誰もbashソリューションを提案していません:

shopt -s extglob
while read line; do
    echo "${line%%*([0-9])}"
done < filename
于 2012-09-18T20:52:56.513 に答える