19

私はこのようなものを持っているテキストファイルを持っています-

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
4

6 に答える 6

26

区切り文字が空白文字の場合

 cut -d " " -f 1 filename

区切り文字がタブ文字の場合、タブはcutコマンドのデフォルトの区切り文字であるため、-dオプションは必要ありません。

cut -f 1 filename

-d 区切り文字; -dオプションの直後の文字は、フィールド区切り文字です。

-f 区切り文字で区切られたフィールドリストを指定します

于 2013-01-15T03:28:20.653 に答える
11
 nawk '{print $1}' file > newFile && mv newFile file

また

 cut -f1 file > newFile && mv newFile file

SunOSを使用しているので、nawkに慣れておく必要があります(awkの古くて気難しいバージョンであるawkではなく、nawk = newawk;-)。

いずれの場合も、ファイルの最初のフィールドをnewFileに出力しています。

(n)awkは、テキストファイルを簡単に操作できるように設計された完全なプログラミング言語です。は$1各行の最初のフィールドを意味し、$ 9は9番目のフィールドなどを意味し、$0は行全体を意味します。(n)awkに、フィールドを区切るために何を使用するかを指示できます。これは、タブ文字または'|'の場合があります。char、または複数のスペース。デフォルトでは、awkのすべてのバージョンで、ファイルの1行ごとに空白、つまり複数のスペース、または1つのタブを使用して列/フィールドを区切ります。

awkの非常に優れたイントロについては、GrymoireのAwkページを参照してください。

&&つまり、前のコマンドが問題なく終了した場合にのみ、次のコマンドを実行します。これにより、エラーが発生したために、適切なデータファイルを誤って消去することがなくなります。

IHTH

于 2013-01-15T03:24:34.343 に答える
1

これを試して

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

出力

10.2.57.44
120.149.20.197
10.90.158.161
于 2013-01-15T04:05:51.267 に答える
1

持っている場合はvim、それを使用してファイルを開きます。次に、コマンドモードで、置換(タブ、スペース、または区切り文字)を記述します%s:<delimiter>.*$::g。次に、ファイルを。で保存します:wq

sedこのようなgiveコマンドを使用するsed -e 's/<delimiter>.*$//' > file.txt

于 2013-01-15T03:34:58.217 に答える
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';

于 2013-01-15T03:36:36.940 に答える
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.txttmp_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

于 2013-01-15T03:24:23.743 に答える