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

新手上路,请多包涵

我正在尝试从 unix 数据文件中获取前 22 个字符。这是我的数据如下所示。

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

 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-

原文由 Teja 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 826
2 个回答

cut

 $ cut -c-22 file
0000000000011999980001
0000000000021999980001
0000000000031999980001
0000000000041999980001
0000000000051999980001
0000000000061999980001

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

 $ sed -r 's/(.{10})(.{12}).*/\1 \2/' file
0000000000 011999980001
0000000000 021999980001
0000000000 031999980001
0000000000 041999980001
0000000000 051999980001
0000000000 061999980001

原文由 Chris Seymour 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 awk 'BEGIN{FIELDWIDTHS="22"} {print $1}' file

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

带有空字符(这取决于您的要求,您想要跳过空格或者您想要在输出中包含并计算它们)

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

 echo "0 0 0 0 00000001199998000180000"|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0 0 0 0 00000001199998

如果你想跳过那些空格:(又快又脏)

 echo "0 0 0 0 00000001199998000180000"|sed 's/ //g'|awk 'BEGIN{FIELDWIDTHS="22"} {print $1}'
0000000000011999980001

原文由 Kent 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题