6

私はこのようなテキストファイルを持っています:

1 http http 3 4 5 
2 dns dns 4 
3 ftp ftp 4 5 6 8 

出力を次のようにします。

1 HTTP http 3 4 5 
2 DNS dns 4 
3 FTP ftp 4 5 6 8 

2番目のフィールドを小文字から大文字に変更し、2番目のフィールドのみを変更したいと思います。

特定の行のフィールド数は固定されていないことに注意してください。

を使用してこの目標を達成できますawkか?

4

2 に答える 2

10

きっとできます。方法は次のとおりです。

awk '$2 = toupper($2)' file

結果:

1 HTTP http 3 4 5
2 DNS dns 4
3 FTP ftp 4 5 6 8

マニュアルから:

tolower(文字列)

文字列 str のコピーを返します。str 内のすべての大文字は対応する小文字に変換されます。アルファベット以外の文字は変更されません。

タッパー(str)

文字列 str のコピーを返します。str 内のすべての小文字は対応する大文字に変換されます。アルファベット以外の文字は変更されません。


サンプルデータが与えられた場合、少なくとも3つの列があり、議論する変数コンポーネントは単語を含む列の後の列に適用されると仮定しました。私が間違っていた場合は、条件を追加するだけです。

awk 'NF>1 { $2 = toupper($2) }1' file
于 2012-12-24T14:30:11.650 に答える
0
perl -F -ane '$F[1] = lc($F[1]);print "@F"' your_file
于 2012-12-24T18:37:48.133 に答える