log.txtというファイルがあります。 -シェルスクリプトを使用してファイルから文字列を抽出します
/proc
used avail
10 100
シェルスクリプトを使用して以下の文字列を抽出するにはどうすればよいですか。私は下の文字列を抽出したい。
/proc
10
100
log.txtというファイルがあります。 -シェルスクリプトを使用してファイルから文字列を抽出します
/proc
used avail
10 100
シェルスクリプトを使用して以下の文字列を抽出するにはどうすればよいですか。私は下の文字列を抽出したい。
/proc
10
100
awk '{print $1 $4 $5}' log.txt
thxですが、実際にはファイルの内容は上記とは異なります。そのようなもの: - 最初の行には/ procだけがあります。 2番目の行には "used"と "avail"、次の行には "10"と "100"が表示されます。その「10」を「使用」し、「100」を「使用」とします。構造はこのようなものです。私はここで説明したいものをあなたが望むことができることを望むことができます – user358232
1ページ目で私の質問を見てください(スクロールアップ)... ur答えはそれのために働いていません – user358232
awk '/\/proc/ {print;getline;getline;print $1"\n"$2}' log.txt
ラインが/proc
にマッチしたときに上記awk
コマンドは二回getline
を呼び出します。 print
ステートメントは、一致した後に2行目を出力します。
出力:SEDを使用して
/proc
10
100
、それはあなたが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の代わりに実際のタブです。
ありがとうございます:) – user358232
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を与えていません。
既存の質問について[最も有用な回答を受け入れる](http://stackoverflow.com/faq#howtoask)を忘れないでください。 – Johnsyweb
Ericの答えと自分自身のコメントに続いて、あなたの質問を編集してStackOverflowコミュニティが推測するのではなく、 'log.txt'の*実際の内容と実際の*期待される出力を含めてください。いつもありがとう! – Johnsyweb
Aha。ありがとう@dogbane。ちょっとした書式があれば、世界は変わります。 – Johnsyweb