Chinaunix

标题: 用shell如何提取一个文件的某一列? [打印本页]

作者: miffy米菲    时间: 2008-05-22 12:48
标题: 用shell如何提取一个文件的某一列?
这个文件有20000行,每一行的列数不等,每行中间有不定数目的空格
大致是这样的:
111111000000123  24564 5689 4568 56541  00000000
110125456558863  29862 1235 4896 12368  11111
145698788989999  56897 1589 2365 98765  0255888889999999666
那我想把每一行的第19列(包含空格在内),从这个文件中删除,摘取到另外一个文件中,,应该怎么才能实现?谢谢
作者: kenduest    时间: 2008-05-22 12:53
原帖由 miffy米菲 于 2008-5-22 12:48 发表
这个文件有20000行,每一行的列数不等,每行中间有不定数目的空格
大致是这样的:
111111000000123  24564 5689 4568 56541  00000000
110125456558863  29862 1235 4896 12368  11111
145698788989999  56 ...

  1. ( head -n 18 filename ; tail -n +20 filename ) > newfilename
复制代码


--
作者: wantjutju    时间: 2008-05-22 14:10
标题: 回复 #1 miffy米菲 的帖子
man awk 试一下
作者: swordfish.cn    时间: 2008-05-22 16:48
原帖由 kenduest 于 2008-5-22 12:53 发表


( head -n 18 filename ; tail -n +20 filename ) > newfilename

--


老大理解错题意了,是提取第十九列。这个应该用 cut 来完成。


  1. cut -d' ' -f 19 FILE
复制代码

作者: Cyberman.Wu    时间: 2008-05-22 17:49
标题: 回复 #4 swordfish.cn 的帖子
cut只能按固定的单字符分隔或按位置分隔吧,如果由不定的空格分的列(如ls -l的结果)它是没办法的。
作者: MMMIX    时间: 2008-05-22 20:13
原帖由 Cyberman.Wu 于 2008-5-22 17:49 发表
cut只能按固定的单字符分隔或按位置分隔吧,如果由不定的空格分的列(如ls -l的结果)它是没办法的。

用 awk 撒
作者: swordfish.cn    时间: 2008-05-22 20:44
原帖由 Cyberman.Wu 于 2008-5-22 17:49 发表
cut只能按固定的单字符分隔或按位置分隔吧,如果由不定的空格分的列(如ls -l的结果)它是没办法的。


是的,确实有这个不足。
那还是用 awk 和 sed 这样的工具做吧。
作者: kenduest    时间: 2008-05-23 02:30
原帖由 swordfish.cn 于 2008-5-22 20:44 发表
是的,确实有这个不足。
那还是用 awk 和 sed 这样的工具做吧。


我果然會錯意。那改一下:

[code]awk ' { print $19 }'

--




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2