打印下面的输出的命令行是什么(使用 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

这会将每行上的第一个非空格字符序列转换为大写。

如果输入包含非 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

相关内容