我有一个文本文件,我有这样的东西 -
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
答案 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