awkで空白を持つフィールド区切り文字の一貫性のない動作

awkで空白を持つフィールド区切り文字の一貫性のない動作

次のawkスクリプトは、前のスペースを' 'フィールド区切り文字として無視しますが、他の文字を空の$ 1の前にあるフィールドの区切り文字として扱う方法を示しています。

フィールド区切り文字のすべての値に対して動作を一貫して作成する方法はありますか?

echo -e " Data\tdlm\t\$1\t\$2\t\$3"  
for d in '^' ':' '"' 'x' '/' ' ' ;do
  echo "${d}1${d}2${d}" |awk -F"$d" '
       { printf "|%s|\t|%s|\t|%s|\t|%s|\t|%s|\n", $0, FS, $1, $2, $3; }'
done

出力:

 Data   dlm     $1      $2      $3
|^1^2^| |^|     ||      |1|     |2|
|:1:2:| |:|     ||      |1|     |2|
|"1"2"| |"|     ||      |1|     |2|
|x1x2x| |x|     ||      |1|     |2|
|/1/2/| |/|     ||      |1|     |2|
| 1 2 | | |     |1|     |2|     ||

ベストアンサー1

FS を正規表現FS = "[ \t]+"(たとえば「空白」) に設定すると、前後の空白は削除されません。 awkは前後にスペースを削除しますFS=" "

私はawkにこれをしないように言うことは不可能だと思いますFS=" "

おすすめ記事