-3

大量のネットワーク インターフェイス データ (約 1000) を含むこの file1.csv ファイルを取得し、ifcfg-lo:x ファイルのようにネットワーク インターフェイス ファイルを作成する必要があります。

file1.csv ファイルの内容は次のとおりです。

Hostname        Loop_back_ip        netmask                    interface

localhost1     192.168.1.10         255.255.255.255         lo:116

したがって、スクリプトは file1.csv ファイルからコンテンツを読み取り、次のようにインターフェイス ファイルを作成する必要があります。

ファイル名 = ifcfg-lo:116

ファイルの内容:

DEVICE=lo:116

IPADDR=192.168.1.10

NETMASK=255.255.255.255

NETWORK=192.168.1.0

BROADCAST=255.255.255.255

ONBOOT=yes

NAME=loopback
4

1 に答える 1

0

昨日試してみましたが、解決策に非常に近づいています。インターネットで調べて、perl スクリプトを作成し、csv ファイルからデータを抽出して複数のインターフェイスを作成することができました。

しかし、私が見た小さな問題があり、ファイルに余分な文字が入っている理由を理解できません。

コードは次のとおりです。

#!/usr/bin/perl
use strict;
use warnings;

sub main
{
        # Note: this could be a full file path
        my $filename = "file1.csv";

        open(INPUT, $filename) or die "Cannot open $filename";

        # Read the header line.
        #my $line = <INPUT>;
        my $line;

        # Read the lines one by one.
        while($line = <INPUT>)
        {
                chomp($line);

                # Display the header, just to check things are working.

                my ($hostname, $ip, $netmask, $interface) = split(',', $line);
                print "$hostname $ip $netmask $interface\n";


                {
                        if( -d "/var/tmp/$hostname")
                        {
                                open(EF, ">/var/tmp/$hostname/ifcfg-$interface") or die "writing /var/tmp/$hostname/ifcfg-$interface\n";
                                print EF "DEVICE=$interface\n";
                                print EF "IPADDR=$ip\n";
                                print EF "NETMASK=$netmask\n";
                                print EF "NAME=loopback\n";
                                print EF "BOOTPROTO=none\n";
                                print EF "TYPE=Ethernet\n";
                                print EF "ONBOOT=yes\n";
                                close EF;
                        }
                        else
            {
                                system ("mkdir /var/tmp/$hostname");
                                open(EF, ">/var/tmp/$hostname/ifcfg-$interface") or die "writing /var/tmp/$hostname/ifcfg-$interface\n";
                                print EF "DEVICE=$interface\n";
                                print EF "IPADDR=$ip\n";
                                print EF "NETMASK=$netmask\n";
                                print EF "NAME=loopback\n";
                                print EF "BOOTPROTO=none\n";
                                print EF "TYPE=Ethernet\n";
                                print EF "ONBOOT=yes\n";
                                close EF;
                        }
                }

        }

        close(INPUT);
}

main();

したがって、スクリプトを実行すると、ファイルが次のように作成されます。

-rw-r--r-- 1 root root 112 Jul 24 10:09 ifcfg-lo:20
-rw-r--r-- 1 root root 112 Jul 24 10:09 ifcfg-lo:21
-rw-r--r-- 1 root root 112 Jul 24 10:09 ifcfg-lo:22
-rw-r--r-- 1 root root 112 Jul 24 10:09 ifcfg-lo:23

表示用にファイルを「cat」すると、問題は表示されません。

$> cat ifcfg-lo:20
DEVICE=lo:20
IPADDR=A.B.C.D
NETMASK=255.255.255.255
NAME=loopback
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes

しかし、ファイルに「vi」すると、余分な文字 (^M) が表示され、それがどこから来たのか、作成したすべてのファイルにあるのかがわかります。

$> vi ifcfg-lo:20

DEVICE=lo:20^M
IPADDR=A.B.C.D
NETMASK=255.255.255.255
NAME=loopback
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes
于 2013-07-24T14:24:59.080 に答える