私はこのようなものがあるテキストファイルを持っています-
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
誰かがIPアドレス(最初の列)だけを残してすべてを削除し、それを再びいくつかのファイルに保存できるUnixコマンドで私を助けてくれますか?.
したがって、一部のファイルでは、出力は次のようになります。
10.2.57.44
120.149.20.197
10.90.158.161
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は9番目のフィールドなどを意味し、$ 0は行全体を意味します。 (n)awkにフィールドを区切るために何を使用するかを指示できます。タブ文字または「|」の可能性があります。 char、または複数のスペース。デフォルトでは、awkのすべてのバージョンで、ファイル内の行ごとに空白、つまり複数のスペース、または1つのタブを使用して、列/フィールドを区切ります。
Awkの非常に優れた紹介については、 GrymoireのAwkページ を参照してください。
&&
は、前のコマンドが問題なく終了した場合にのみ、次のコマンドを実行することを意味します。このようにして、エラーが発生したために、誤って適切なデータファイルを消去しないようにします。
IHTH
区切り文字がスペース文字の場合
cut -d " " -f 1 filename
区切り文字がタブ文字の場合、タブはcut
コマンドのデフォルトの区切り文字であるため、-dオプションは不要です。
cut -f 1 filename
-d区切り文字; -dオプションの直後の文字はフィールド区切り文字です。
-f区切り文字で区切られたフィールドリストを指定します
これを試して
awk '{$1=$1; print $1}' temp.txt
出力
10.2.57.44
120.149.20.197
10.90.158.161
vim
がある場合は、それを使用してファイルを開きます。次に、コマンドモードで置換(タブまたはスペース、または区切り文字は何でも)%s:<delimiter>.*$::g
を書き込みます。次に、:wq
を使用してファイルを保存します。
このようなsed
giveコマンドを使用するsed -e 's/<delimiter>.*$//' > file.txt
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';
に変更して、バックアップを作成することもできます
awk '{ print $1 }' file_name.txt > tmp_file_name.txt
mv tmp_file_name.txt file_name.txt
'> tmp_file_name.txt'
は、awk '{ print $1 }' file_name.txt
のSTDOUT
をtmp_file_name.txt
という名前のファイルにリダイレクトすることを意味します
FYI:
$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
とともに使用します