昨日試してみましたが、解決策に非常に近づいています。インターネットで調べて、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