1

あまり適切にフォーマットされていない出力があり、変数値のキャプチャで問題が発生します。

例えば:

This is counter1 1000
this counter2 2000
this counter3 is higher value 3000

上記のファイルから、1000、2000、3000をキャプチャしたいと思います。print$ xでawkを使用すると、x =任意の値になり、行ごとに異なる値が割り当てられます。$ 4を使用すると、最初の行で1000を選択できますが、2行目では値が提供されず、3行目ではより高く印刷されるため、フィールドセパレーターを挿入して変数を読み取ります。どんな助けでも大歓迎です!

4

6 に答える 6

5

数値が常に最後のフィールドである場合は、次のことができます

{ print $NF }
于 2013-01-29T22:41:16.563 に答える
1

最後の引数のみが必要で、数値の場合のみ:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^.* \([0-9]\{1,99\}\)/\1/p'

1000
2000
3000

カウンターの番号をトラップすることもできます(したがって、を含む行のみを読み取りますcounterX):

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^.*\(counter[0-9]\{1,99\}\) \(.* \)\{0,1\}\([0-9]\{1,99\}\)$/\1 \3/p'

counter1 1000
counter2 2000
counter3 3000

または、セパレーターを見つけるだけでも:

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -ne 's/^\(.*counter[0-9]\{1,99\}.*\) \([0-9]\{1,99\}\)$/\1 :: \2/p'
This is counter1 :: 1000
this counter2 :: 2000
this counter3 is higher value :: 3000

または、または...

echo $'For example:\nThis is counter1 1000\nthis counter2 2000\n
     this counter3 is higher value 3000\ndone.\n' |
  sed -e 's/^\(.*counter[0-9]\{1,99\}.*\) \([0-9]\{1,99\}\)$/\1 :: \2/'

For example:
This is counter1 :: 1000
this counter2 :: 2000
this counter3 is higher value :: 3000
done.
于 2013-01-29T22:42:46.623 に答える
1

最後の単語を印刷するには、次を使用します

awk '{ print $NF }'

数字である単語を区切るには、次を使用できます

cat yourfile | tr ' ' '\n' | egrep '^[0-9]+$'

またはGNU固有grep -ow '[0-9]*' yourfile

行の数字である最初の単語のみを見つけるには、次を使用できます

awk '{ for(i=0; i<=NF; i++) if($i ~ /^[0-9]+$/) { print $i; break; } }'
于 2013-01-29T22:43:35.873 に答える
0

sed を使用して最後の要素のみを出力するには、次のようにします。

sed 's/.* //'

テスト入力:

cat << EOF > infile
This is counter1 1000
this counter2 2000
this counter3 is higher value 3000
EOF

テストを実行します。

<infile sed 's/.* //'

出力:

1000
2000
3000
于 2013-01-29T23:31:01.437 に答える
0

sed を使用する他の方法

sed -re 's/(.*)\s([0-9]+)/\2/' temp.txt

出力

1000
2000
3000
于 2013-01-30T00:59:18.107 に答える
0

他の提案どおり、awk で $NF を使用できます。数字が常に最後のフィールドである場合は、perl を使用することもできます。

perl -F -lane 'print $F[scalar(@F)-1]' your_file

または、常に最後のフィールドではない場合は、次のようになります。

perl -F -lane 'for(@F){print if(/^\d+$/)}' your_file
于 2013-01-30T07:09:31.237 に答える