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

时间:2013-01-15 03:22:31

标签: linux unix sunos

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

10.2.57.44      56538154    3028
120.149.20.197  28909678    3166
10.90.158.161   869126135   6025

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

10.2.57.44
120.149.20.197
10.90.158.161

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

因此在某些文件中输出应该是这样的 -

10.2.57.44
120.149.20.197
10.90.158.161

6 个答案:

答案 0 :(得分:19)

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

 cut -d " " -f 1 filename

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

cut -f 1 filename

<强> -d 分隔符;紧跟在-d选项后面的字符是字段分隔符。

<强> -f 指定字段列表,以分隔符

分隔

答案 1 :(得分:9)

 nawk '{print $1}' file > newFile && mv newFile file

OR

 cut -f1 file > newFile && mv newFile file

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

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

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

要获得非常好的awk介绍,请参阅Grymoire's Awk page

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

IHTH

答案 2 :(得分:1)

如果您有vim,请使用它打开文件。然后在命令模式下写入替换(制表符或空格或任何分隔符)%s:<delimiter>.*$::g。现在使用:wq保存文件。

使用sed命令,如sed -e 's/<delimiter>.*$//' > file.txt

答案 3 :(得分:1)

perl脚本怎么样;)

#!/usr/bin/perl -w
use strict;

my $file = shift;
die "Missing file or can't read it" unless $file and -r $file;

sub edit_in_place
{
    my $file       = shift;
    my $code       = shift;
    {
        local @ARGV = ($file);
        local $^I   = '';
        while (<>) {
            &$code;
        }
    }
}

edit_in_place $file, sub {
    my @columns = split /\s+/;
    print "$columns[0]\n";
};

这将编辑文件,因为你说它是一个大文件。您还可以通过将local $^I = '';修改为local $^I = '.bak';

来创建备份

答案 4 :(得分:1)

试试这个

awk '{$1=$1; print $1}' temp.txt

输出

10.2.57.44
120.149.20.197
10.90.158.161

答案 5 :(得分:0)

awk '{ print $1 }' file_name.txt > tmp_file_name.txt
mv tmp_file_name.txt file_name.txt

'> tmp_file_name.txt'表示将STDOUT awk '{ print $1 }' file_name.txt重定向到名为tmp_file_name.txt的文件

仅供参考:

$1 means first column based on delimiter. The default delimiter is whitespace
$2 means second column based on delimiter. The default delimiter is whitespace
..
..
$NR means last column based on delimiter. The default delimiter is whitespace

如果您想更改分隔符,请将awk-F

一起使用