텍스트 파일이 있는데 임의의 파일입니다.
가격.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