web-dev-qa-db-ja.com

awkの変数から空白を削除するにはどうすればよいですか?

$ 2が私の変数だとします。から行ってみました

awk -F\, '{print $2 ":"}'

awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'

しかし、何かを印刷することから、何も印刷しないことになります。

24
Hoa

gsubの結果を出力していますが、gsubは、変更されたコピーを返す代わりに、$2のインプレース変更を行います。 gsubを呼び出して、印刷します。

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
44
je4d

これらの機能は、読みやすさを向上させるのに役立ちます。また、トリミングされた結果を返します。

function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s }
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s }
function trim(s) { return rtrim(ltrim(s)); }
BEGIN {
# whatever
}
{
# whatever
}
END {
# whatever
} 

ソース: https://Gist.github.com/andrewrcollins/1592991

29
Jong Bor Lee

(前の回答に直接コメントするのに十分なポイントがありません。)

$2endで空白をトリムするには:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'

$2beginningで空白を削除するには、次を使用します。

awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}'

そして、終わりと始まりの両方について:

awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}'
16
JGC

Gawkの1つのライナー:

gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'
3
Ben

unixのltrimおよびrtrim

awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt

1
VIPIN KUMAR

より簡単なオプション:

トリム関数を定義する必要があります。一般的な置換にはgsubを使用します。次に、スペースで開始または終了する場合(1回以上)、正規表現で検索し、フィールドを返します。

   awk -F'|' 'function trim(field){
   gsub(/^ +| +$/,"", field); 
   return field
   }{
   OFS=",";
   print trim($2),trim($3)}' stations > lista.csv

このコードでは非常に優れています

そして、ファイルstationsは次の構造です。

     1 | UTAR | U de Tarapacá                   
     3 | VALN | Valparaíso                      
     4 | JRGN | Junta Gorgino                   
     6 | TRPD | Torpederas