テキストファイルがありますが、任意のファイルです。
価格.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