以下の出力を印刷するコマンドラインは何ですか(awkのtoupper組み込み機能を使用)。

以下の出力を印刷するコマンドラインは何ですか(awkのtoupper組み込み機能を使用)。

テキストファイルがありますが、任意のファイルです。

価格.txt

orange  5   300 Florida
banana  7   500 California
apple   3   600 Maryland
grape   14  50  New Mexico
mango   30  1   Florida
tomato  45  100 California
melon   22  600 Texas
lemon   19  400 Florida

以下のように印刷したいと思います。 ($ 1はすべて大文字で、残りは元のファイルと同じです。)

ORANGE  5   300 Florida
BANANA  7   500 California
APPLE   3   600 Maryland
GRAPE   14  50  New Mexico
MANGO   30  1   Florida
TOMATO  45  100 California
MELON   22  600 Texas
LEMON   19  400 Florida

この場合、コマンドにawk "toupper"オプションを使用する方法は?

答え1

使用:

awk -F'( )' '{ $1=toupper($1) }1' infile

フィールド区切り文字と正規表現モードで定義する単一のスペースを使用する目的は、フィールド間のインデントを維持し、出力を-F'( )'入力と同じくらいきれいに保つことです。きれいな出力が気に入らない場合は削除してください。

答え2

そしてperl

perl -pe 's/\S+/\U$&/' < input.txt > output.txt

これにより、各行で空白以外の文字の最初のシーケンスが大文字に変換されます。

-CS入力にASCII以外の文字が含まれていてUTF-8でエンコードされている場合は、このオプションを追加してください。そのロケールの文字セットに従ってエンコードされている場合は、その文字セットを代わりに追加してください-Mopen=locale

入力に固定幅列(文字数ベース)がある場合は、GNUawkとそのFIELDWIDTHS列指定方法を使用できます。

gawk -v FIELDWIDTHS='8 4 4 *' -v OFS= '{$1 = toupper($1); print}'

実際、各行の最初の8文字を大文字に変換します。次のようにすることもできます。

awk '{print toupper(substr($0, 1, 8)) substr($0, 9)}'

gawkそしてPOSIX準拠の実装では、awk入力がロケールエンコーディングに従ってテキストとしてエンコードされると仮定します。)

答え3

GNUコマンドを使ってみましたが、sedうまくいきます。

sed "s/^[a-zA-Z]*/\U&/1" p.txt

出力

ORANGE  5   300 Florida
BANANA  7   500 California
APPLE   3   600 Maryland
GRAPE   14  50  New Mexico
MANGO   30  1   Florida
TOMATO  45  100 California
MELON   22  600 Texas
LEMON   19  400 Florida

Python

#!/usr/bin/python
import os
import re
k=open('filename','r')
for i in k:
    o=i.split(' ')
    b=o[0].islower()
    if (b is True ):
        up=o[0].upper()
        o[0]=up
        print " ".join(o).strip()

出力

ORANGE  5   300 Florida
BANANA  7   500 California
APPLE   3   600 Maryland
GRAPE   14  50  New Mexico
MANGO   30  1   Florida
TOMATO  45  100 California
MELON   22  600 Texas
LEMON   19  400 Florida

関連情報