shell脚本读取并打印字符串的一部分

发布于 2024-08-04 07:34:06 字数 662 浏览 8 评论 0原文

大家好,

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

Example: input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

Expected result: newfile.txt

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

I'm guessing something like 'sed' can be used to solve my problem, but i'm不太确定如何实现这一目标。我已连接到运行 Solaris 5.10 的计算机。如果有人能通过简短的解释来指导我,我将不胜感激。

问候,

新手。

Good day members,

I have an input file which has rows of numerical digits ( close to 2000 rows ) I want to extract out " the second to the eight digit from the right" of every row of the numeric string into a separate file, with the result separated by a comma as shown.

Example: input.txt

00000000000001303275310752

00000000000001827380519015

00000000000000800081610361

00000000000000449481894004

00000000000000449481894004

00000000000001812612607514

Expected result: newfile.txt

7531075,

8051901,

8161036,

8189400,

8189400,

1260751,

I'm guessing something like 'sed' can be used to solve my problem, but i'm not quite sure how to go about achieving this. I'm connected to a machine running on Solaris 5.10 Appreciate if someone can guide me with a brief explanation.

regards,

novice.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

指尖微凉心微凉 2024-08-11 07:34:06

对于定宽输入,可以尝试:

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

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

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

For fixed width input, try:

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

which is to say, extract the 19th to 26th character of input txt and then replace the end of line with a comma.

If you have variable length lines, you will need something a little different.

玩心态 2024-08-11 07:34:06

您可以使用以下方法截断前导零:

sed 's/^0*//g'

因此,类似:

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

应该有效。

You can truncate the leading zeros with:

sed 's/^0*//g'

Thus something like:

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

should work.

小嗷兮 2024-08-11 07:34:06

尝试:

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

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

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

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

Try:

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

Or if you don't like regular expressions:

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

This will work for any fixed or variable length line.

笑饮青盏花 2024-08-11 07:34:06

这是 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,

Here is a solution in python, it should be intuitive:

$ 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,
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文