首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取unix数据文件中每行的前n个字符

如何获取unix数据文件中每行的前n个字符
EN

Stack Overflow用户
提问于 2013-01-22 23:50:35
回答 3查看 93.1K关注 0票数 55

我正在尝试从unix数据中获取前22个字符,file.Here是我的数据,如下所示。

前12个字符是第1列,接下来的10个字符是第2列。

代码语言:javascript
运行
复制
000000000001199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
000000000002199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
000000000003199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
000000000004199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
000000000005199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
000000000006199998000180000     DUMMY RAG #         MFR NOT ST            1999980    ZZ-            0        0              0ZZ-
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-22 23:54:52

使用cut

代码语言:javascript
运行
复制
$ cut -c-22 file
0000000000011999980001
0000000000021999980001
0000000000031999980001
0000000000041999980001
0000000000051999980001
0000000000061999980001

如果我理解第二个要求,您应该将前22个字符拆分为两列,长度分别为10和12。sed是最好的选择:

代码语言:javascript
运行
复制
$ sed -r 's/(.{10})(.{12}).*/\1 \2/' file
0000000000 011999980001
0000000000 021999980001
0000000000 031999980001
0000000000 041999980001
0000000000 051999980001
0000000000 061999980001
票数 104
EN

Stack Overflow用户

发布于 2013-01-23 00:20:23

sudo_O提供了很好的剪切和sed解决方案,我只是添加了一个awk一行程序:

代码语言:javascript
运行
复制
awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' file

echo "000000000001199998000180000     DUMMY RAG"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0000000000011999980001

使用空字符(这取决于您的要求,您是想跳过空格,还是想在输出中包含并计算空格)

如果应该计算空格并在输出中显示:(您不必更改上面的cmd )

代码语言:javascript
运行
复制
echo "0 0 0 0 00000001199998000180000"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                                                                         
0 0 0 0 00000001199998

如果你想跳过这些空格:(快速和肮脏)

代码语言:javascript
运行
复制
echo "0 0 0 0 00000001199998000180000"|sed 's/ //g'|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'                                                            
0000000000011999980001
票数 3
EN

Stack Overflow用户

发布于 2020-10-18 22:41:56

这实际上可以在Bash中使用表达式${VARIABLE:offset:length} (其中:length是可选的)来完成,而不需要使用任何外部程序(使用这种方法的脚本必须以#!/bin/bash而不是#!/bin/sh开头,并且不符合POSIX shell ):

代码语言:javascript
运行
复制
#!/bin/bash

STR="123456789"

echo ${STR:0:1}
echo ${STR:0:5}
echo ${STR:0:10}
echo ${STR:5:10}
echo ${STR:8:10}

将会有以下输出:

代码语言:javascript
运行
复制
1
12345
123456789
6789
9

请注意,起始偏移量从零开始,长度必须至少为1。也可以使用括号中的负偏移量从字符串的右侧偏移:

代码语言:javascript
运行
复制
echo ${STR:(-5):4}

5678

这里提供了一个非常有用的资源,可以让您了解所有关于Bash字符串操作的知识:https://tldp.org/LDP/abs/html/string-manipulation.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14462529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档