2017-11-15 4 views
0

を使用して、/ etc/passwdファイルをフォーマットする方法:私はこれは私がこれまでに出ているものですperlのフォーマット</p> <p>を使用して、/ etc/passwdファイルをフォーマットしようとしているperlのフォーマット

#!/usr/bin/perl 

use warnings; 

format MYFORMAT = 
@<<<<<<<<<<<<<<<| @<<<<<<<<<<<<<<<| @<<<<<<<<<<<<<<< 
$username,  $UID,    $name 
. 

$username = `cut -d: -f1 /etc/passwd`; 
$UID = `cut -d: -f3 /etc/passwd`; 
$name = `cut -d: -f5 /etc/passwd`; 

$~ = "MYFORMAT"; 
write; 

警告またはエラーは表示されません。書式設定は機能しますが、問題は、etc/passwdファイルの最初の行だけを表示することです。私はUsername、UID、および名前としてそれぞれroot、0、rootだけを取得します。

各列に印刷されるすべてのユーザー名、UID、および名前が必要です。私は間違って何をしているのかわかりません。ターミナル内のユーザー名だけを取得するためにbashコマンドを実行すると、そのすべてが表示されるためです。しかし、それはスクリプトの中でそれをしません。

+1

'use warnings;'は警告メッセージを表示します。 – toolic

+0

警告は表示されません。コードの書式が変更されました。 – jshakil

答えて

1

あなたは/ etc/passwdファイルをループしていないので、最初のフィールドセットを変数に戻しますが、最初のフィールドセットを変数に戻します。

#!/usr/bin/perl 
$username = `cut -d: -f1 /etc/passwd`; 
print $username; 

代わりに、このスクリプトに対応するpasswd/<の/ etc perlのmyscript.plを試してみてください:あなたはあなたのを与えていない場合は

~/tmp$ perl t2.pl < /etc/passwd 
root   | 0    | root 
daemon   | 1    | daemon 
bin    | 2    | bin 
sys    | 3    | sys 
sync   | 4    | sync 
games   | 5    | games 

#!/usr/bin/perl 
use warnings; 
use strict; 
my $username; 
my $UID; 
my $name; 

format = 
@<<<<<<<<<<<<<<<| @<<<<<<<<<<<<<<<| @<<<<<<<<<<<<<<< 
$username,  $UID,    $name 
. 

while (<>) { 
    ($username, undef, $UID, undef, $name, undef) = split(':'); 
    write(); 
} 

出力は次のようになり、これを考えてみましょう名前をフォーマットします.STDOUTがデフォルトです。/etc/passwdから各行を読み込み、個別に処理することができます。

関連する問題