2011-08-08 16 views
0

log.txtというファイルがあります。 -シェルスクリプトを使用してファイルから文字列を抽出します

/proc 
used avail 
10  100 

シェルスクリプトを使用して以下の文字列を抽出するにはどうすればよいですか。私は下の文字列を抽出したい。

/proc 
10 
100 
+2

既存の質問について[最も有用な回答を受け入れる](http://stackoverflow.com/faq#howtoask)を忘れないでください。 – Johnsyweb

+0

Ericの答えと自分自身のコメントに続いて、あなたの質問を編集してStackOverflowコミュニティが推測するのではなく、 'log.txt'の*実際の内容と実際の*期待される出力を含めてください。いつもありがとう! – Johnsyweb

+0

Aha。ありがとう@dogbane。ちょっとした書式があれば、世界は変わります。 – Johnsyweb

答えて

1
awk '{print $1 $4 $5}' log.txt 
+0

thxですが、実際にはファイルの内容は上記とは異なります。そのようなもの: - 最初の行には/ procだけがあります。 2番目の行には "used"と "avail"、次の行には "10"と "100"が表示されます。その「10」を「使用」し、「100」を「使用」とします。構造はこのようなものです。私はここで説明したいものをあなたが望むことができることを望むことができます – user358232

+0

1ページ目で私の質問を見てください(スクロールアップ)... ur答えはそれのために働いていません – user358232

1
awk '/\/proc/ {print;getline;getline;print $1"\n"$2}' log.txt 

ラインが/procにマッチしたときに上記awkコマンドは二回getlineを呼び出します。 printステートメントは、一致した後に2行目を出力します。

出力:SEDを使用して

/proc 
10 
100 
1

、それはあなたが10と100の間で持っているスペースの場合:

sed -e '2d;3s/ */\n/' log.txt 

それはタブである場合は、10と100の間で持っていて、 GNU sedを与えました:あなたが10〜100のタブを持っている場合は、GNU sed:

sed -e '2d;3s/\t\t*/\n/' log.txt 

あなたはGNU sedを与えていないのですが、上の2 \ tの代わりに実際のタブです。

+0

ありがとうございます:) – user358232

0

SED(またはawkの)を回避し、標準のUNIXユーティリティを使用して、そしてそれはあなたが10と100の間で持っているスペースの場合:

paste -s -d " " file | tr -s " " | cut -d " " -f 1,4,5 | tr " " "\n" 

それはタブである場合は、10と100の間で持っている、とあなたはGNUを持っていますユーティリティ:

paste -s -d "\t" file | tr -s "\t" | cut -f 1,4,5 | tr "\t" "\n" 
それはあなたが10と100の間で持っているタブの場合

、あなたはGNUユーティリティが、本当のタブの代わりに、上記の\ tと実際の代わりに\ nを与えていません。

関連する問題