Unix命令删除第一列后的所有内容

ars*_*nal 18 unix linux sunos

我有一个文本文件,其中我有这样的东西 -

10.2.57.44      56538154    3028
120.149.20.197  28909678    3166
10.90.158.161   869126135   6025
Run Code Online (Sandbox Code Playgroud)

在那个文本文件中,我有大约1,000,000行,如上所述.我在SunOS环境中工作.我需要一种方法来删除该文本文件中的所有内容,只留下IP地址(上面文本文件中的第一列是IP地址).因此在运行一些unix命令后,文件应该如下所示.

10.2.57.44
120.149.20.197
10.90.158.161
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决一些Unix命令,它可以删除所有只留下IP地址(第一列)的东西并再次将其保存回某个文件.

所以在某些文件中输出应该是这样的 -

10.2.57.44
120.149.20.197
10.90.158.161
Run Code Online (Sandbox Code Playgroud)

Mud*_*san 22

如果分隔符是空格字符使用

 cut -d " " -f 1 filename
Run Code Online (Sandbox Code Playgroud)

如果分隔符是制表符,则不需要-d选项作为选项卡是cut命令的默认分隔符

cut -f 1 filename
Run Code Online (Sandbox Code Playgroud)

-d 分隔符; 紧跟在-d选项后面的字符是字段分隔符.

-f 指定由分隔符分隔的字段列表

  • 这是迄今为止最好的解决方案.遗憾的是,这不是公认的答案,并且有太多复杂的替代解决方案. (2认同)

she*_*ter 10

 nawk '{print $1}' file > newFile && mv newFile file
Run Code Online (Sandbox Code Playgroud)

要么

 cut -f1 file > newFile && mv newFile file
Run Code Online (Sandbox Code Playgroud)

当你使用SunOS时,你会想要熟悉nawk(不是awk,这是awk的旧版和胡思乱想的版本,而nawk = new awk ;-).

在任何一种情况下,您都将文件中的第一个字段打印到newFile.

(n)awk是一种完整的编程语言,专为轻松操作文本文件而设计.该$1方法在每一行的第一个字段,$ 9将意味着第九场等,而$ 0表示整行.你可以告诉(n)awk使用什么来分隔字段,它可能是tab char,或者是'|' char或多个空格.默认情况下,awk的所有版本都使用空格(即多个空格)或1个制表符来分隔文件中每行的列/字段.

有关awk的非常好的介绍,请参阅Grymoire的Awk页面

&&意味着,只有在前一个命令完成且没有问题的情况下才执行下一个命令.这样你就不会意外删除你的好数据文件,因为有些错误.

IHTH