shell脚本,用于读取和打印字符串的一部分

时间:2009-09-10 12:21:18

标签: shell solaris

美好的一天成员,

我有一个输入文件,其中包含数字行(接近2000行)我想从数字字符串的每一行中“提取右边第二个到第八个数字”到一个单独的文件中,结果用逗号分隔,如图所示。

示例:input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

预期结果:newfile.txt

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

我猜是像'sed'之类的东西可以用来解决我的问题,但我不太确定如何实现这个目标。我已连接到在Solaris 5.10上运行的计算机。如果有人可以为我提供简短的解释,请注意。

的问候,

新手。

4 个答案:

答案 0 :(得分:2)

对于固定宽度输入,请尝试:

cut -c19-26 input.txt | sed 's/$/,/'

也就是说,提取输入txt的第19个字符到第26个字符,然后用逗号替换行尾。

如果你有可变长度的线条,你需要一些不同的东西。

答案 1 :(得分:1)

您可以使用以下命令截断前导零:

sed 's/^0*//g'

因此像:

sed 's/^0*//g' input.txt | sed 's/$/,/'

应该有用。

答案 2 :(得分:1)

尝试:

perl -pe 's/^.*(\d{7})\d$/$1,/' < input.txt

或者如果你不喜欢正则表达式:

perl -pe '$_ = substr($_,-9,-2) . ",\n"' < input.txt

这适用于任何固定或可变长度的行。

答案 3 :(得分:0)

这是python中的一个解决方案,它应该是直观的:

$ cat data2
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514

$ cat digits.py
import sys
for line in sys.stdin:
    print '%s,' % (line[-9:-2])

$ python digits.py < data2
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,