2017-03-24 11 views
1

文字列で正確な「フィールド」をいくつか分離し、それらを.txtファイルに入れるのに問題があります。私は/ etc/passwdファイルから 'nologin'ユーザーを抽出する必要があり、それは簡単なステップです。ファイルから文字列を検索して選択する

grep -n 'nologin' /etc/passwd > file1.txt 

catコマンドは、例のために私を与える::

2:daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin 
3:bin:x:2:2:bin:/bin:/usr/sbin/nologin 
4:sys:x:3:3:sys:/dev:/usr/sbin/nologin 

、今、私がFILE1.TXTから抽出する必要があり

をFILE1.TXTに保存された私は、このコマンドを使用していますnumber(2,3,4)、login(daemon、bin、sys)UIDとシェル。これは次のようになります

2:daemon:1:/usr/sbin/nologin 
3:bin:2:/usr/sbin/nologin 
4:sys:3:/usr/sbin/nologin 

また、出力を* .txtファイルに保存する必要があります。 これをどうすれば実現できますか?

答えて

0

は、次のようなcutコマンドを使用することができますによると

cut -d':' -f1 file1.txt > file2.txt 

man page

-d、--delimiter = DELIM代わりにフィールドのTABの

使用DELIM区切り文字

-f、--fields = LIST

これらのフィールドのみを選択します。 -sオプションは

+0

良い一日!手伝ってくれてどうもありがとう :) – Charlie

0

を指定されていない限り、また、私はあなたがあなたの端末に移動して、あなたのファイルパス を知っていることを確認してくださいあなたの特定のフィールド 1-得るためにはawkを使用することができると思い、何の区切り文字を含まない任意の行を印刷2 - awkコマンドを使用します。-Fは区切り記号を示し、$はフィールド番号を示す$

file1を示します。x:1:1:デーモン:/ usr/sbin:/ usr/sbin/nologin 3:bin:x:2:2:bin:/ bin:/ usr/sbin SYS:X:3:3:SYS:/ 4をnologinには/ devします。/ usr/sbin/nologinに

file1の

awk -F '[:/]' '{print $1 " " $2 " " $4 " " " " $(NF-2) " " $(NF-1) " "  $NF}' file1.txt 

であなたの端末にawkコマンドを使用して、ファイルパスが正しいことを確認してください

$1 or $2 = the number of field or column 

$ NF =最後の列 $(NF-1)=最後の列 前の列とそう=スペース

あなたの出力がされる意味 "" 上:

2デーモン1 usrのsbinに 3ビンnologinの2 USR sbinにnologinにあなたの代わりにスペース例えば

のawkコマンドに区切り文字を追加することができますバック

NOLOGIN 4 SYS 3 USRのsbinに、

awk -F '[:/]' '{print $1 ":" $2 ":" $4 ":/" $(NF-2) "/" $(NF-1) "/" $NF}' file1.txt 

出力:

output

おかげで、持っている。これは私の問題を解決し

0
awk -F: '{print $1,$2,$4,$NF}' OFS=: file1.txt > newfile.txt 

2:daemon:1:/usr/sbin/nologin 
3:bin:2:/usr/sbin/nologin 
4:sys:3:/usr/sbin/nologin 
関連する問題