我有一个文本文件,它是一个随机文件:
价格.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
这会将每行上的第一个非空格字符序列转换为大写。
如果输入包含非 ASCII 字符并且以 UTF-8 编码,请添加该-CS
选项。如果它是根据您的语言环境的字符集进行编码的,请改为添加-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
尝试使用 GNUsed
命令,效果很好
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