2017-02-27 5 views
0

を使用して、ファイルの一部のみを取得します:私は次のようにテキストを含むファイルを持っているのsedやawkの

私は、このファイルのみ /home/user/部分から取得できますか
Directory /home/user/ "test_user" 
bunch of code 
another bunch of code 

私は、ファイルの残りの部分を取り除くためにawk -F '"' 'NR==1{print $1}' file.txtを使用して管理していると私はこのようなgettig出力です:

Directory /home/user/

どのように私は/home/user/一部を取得するには、このコマンドを変更できますか?私はできるだけシンプルにしたいと思います。残念ながら、このファイルを変更してコンテンツを追加/変更することはできません。

それがあるべき awk

答えて

2

:それはこれらのフィールドに行を分割するので"にフィールド区切り文字を設定

awk 'NR==1{print $2}' file.txt 

は間違っていた:[[:space:]]+ある

$1 = 'Directory /home/user/' 
$2 = 'test_user' 
$3 = '' (empty) 

デフォルトのレコードセパレータ、次のように分割します。

$1 = 'Directory' 
$2 = '/home/user/' 
$3 = '"test_user"' 
-3

それが区切り文字を変更すると、あなたが-F"を使用している理由はいくつかのgrep

grep Directory file.txt|awk '{print $2}' 
+2

'grep'は不要です。 'awk '/ Directory/{print $ 2}' 'を使用してください。 – hek2mgl

0

がわからない追加。それを削除すると、$2が必要なものを手に入れます。この場合

awk '/\home\/user\//{print $2}' file.txt 

、行がファイルに埋葬された場合、またはあなたが持っていた場合:あなたは、ラインではなく、カウントレコードの/home/userが含まれている場合printを実行するためにawkを使用することができます

awk 'NR==1{print $2}' file.txt 

複数のインスタンスを使用する場合は、どこにあってもすべてのオカレンスの名前を取得します。

5

あなたのファイルは、それが最初の行の2番目のフィールドを印刷し、ファイルの残りの部分の処理を停止します

awk '{print $2; exit}' file 

大きい場合、これは顕著な、最速を動作するはずです。

+0

良いキャッチ..... – hek2mgl

1

代替として、あなたはheadcutを使用することができます。awkは、パターンを検索することができますので、

$ head -n 1 file | cut -d' ' -f2 
関連する問題