$ 2が私の変数だとします。から行ってみました
awk -F\, '{print $2 ":"}'
に
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
しかし、何かを印刷することから、何も印刷しないことになります。
gsub
の結果を出力していますが、gsub
は、変更されたコピーを返す代わりに、$2
のインプレース変更を行います。 gsub
を呼び出して、印刷します。
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
これらの機能は、読みやすさを向上させるのに役立ちます。また、トリミングされた結果を返します。
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
}
(前の回答に直接コメントするのに十分なポイントがありません。)
$2
のendで空白をトリムするには:
awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}'
$2
のbeginningで空白を削除するには、次を使用します。
awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}'
そして、終わりと始まりの両方について:
awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}'
Gawkの1つのライナー:
gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'
unixのltrimおよびrtrim
awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt
より簡単なオプション:
トリム関数を定義する必要があります。一般的な置換には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