222

cut コマンドでより多くのスペースのフィールド区切り文字を指定する方法はありますか? (" "+ のように) ? 例: 次の文字列で、値「3744」に到達したいのですが、どのフィールド区切り文字を指定すればよいですか?

$ps axu | grep jboss

jboss     2574  0.0  0.0   3744  1092 ?        S    Aug17   0:00 /bin/sh /usr/java/jboss/bin/run.sh -c example.com -b 0.0.0.0

cut -d' '私が望むものではありません.1つのスペースのためだけです. awk私が探しているものでもありませんが、「カット」をどのように行うのですか?

ありがとう。

4

12 に答える 12

354

実際awkには、まさにあなたが調べるべきツールです:

ps axu | grep '[j]boss' | awk '{print $5}'

または、正規表現について知ってgrepいるので、完全に捨てることができます:awk

ps axu | awk '/[j]boss/ {print $5}'

しかし、何らかの奇妙な理由で本当にを使用できないawk場合は、最初にすべての空白を単一のスペースに折りたたむなど、他にできる簡単なことがあります。

ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5

ちなみに、このgrepトリックは、jbossプロセスではなくプロセスのみを取得するための巧妙な方法grep jbossです (awkバリアントについても同様です)。

プロセスのプロセス コマンドにgrepはリテラルが含まれるため、文字クラスの後に.grep [j]bossgrep[j]boss

| grep xyz | grep -v grepこれは、一部の人々が使用するパラダイムを回避するための気の利いた方法です。

于 2011-08-22T03:00:08.607 に答える
12

tr -s [:blank:]ベストアンサーに推薦させていただきます。

なぜカットを使いたいのですか?「最初の 2 つのフィールドを省略して、3 番目のフィールドとその後のすべてのフィールドが必要です」という魔法のコマンドがあります。

cat log | tr -s [:blank:] |cut -d' ' -f 3- 

フィールド数がわからない awk や perl split に同等のコマンドがあるとは思えません。つまり、フィールド X から 3 番目のフィールドを出力します。

于 2015-05-05T16:52:32.477 に答える
9

より短い/より簡単な解決策:使用cuts(私が書いたステロイドをカット)

ps axu | grep '[j]boss' | cuts 4

cutsフィールド インデックスは 0 ベースであるため、5 番目のフィールドは 4 として指定されることに注意してください。

http://arielf.github.io/cuts/

さらに短い (カットをまったく使用しない) のは次のとおりです。

pgrep jboss
于 2014-07-03T02:35:47.450 に答える
8

これを回避する1つの方法は次のとおりです。

$ps axu | grep jboss | sed 's/\s\+/ /g' | cut -d' ' -f3

複数の連続したスペースを単一のスペースに置き換えます。

于 2011-08-22T03:01:53.313 に答える
5

個人的には、このような仕事には awk を使用する傾向があります。例えば:

ps axu| grep jboss | grep -v grep | awk '{print $5}'
于 2011-08-22T03:00:02.290 に答える
2

別の方法として、常に perl があります。

ps aux | perl -lane 'print $F[3]'

または、フィールド #3 から始まるすべてのフィールドを取得する場合 (上記の回答の 1 つに記載されているように):

ps aux | perl -lane 'print @F[3 .. scalar @F]'
于 2016-02-26T07:09:13.400 に答える
0

カットコマンドを使用する必要がある場合の別の方法

ps axu | grep [j]boss |awk '$1=$1'|cut -d' ' -f5

nawkSolaris では、awk をまたはに置き換えます。/usr/xpg4/bin/awk

于 2014-02-03T06:11:36.980 に答える
0

Perl が空白を含むフィールドを処理する方法は今でも気に入っています。
最初のフィールドは $F[0] です。

$ ps axu | grep dbus | perl -lane 'print $F[4]'
于 2015-08-26T03:41:53.177 に答える