아래 출력을 인쇄하는 명령줄은 무엇입니까(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.

입력에 고정 너비 열(문자 수 기준)이 있는 경우 GNU awk및 해당 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

파이썬

#!/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

관련 정보