私の理解は$1
最初のフィールドです。ところで、奇妙に余分なawk '$1=$1'
空白が省略されます。
$ echo "$string"
foo foo bar bar
$ echo "$string" | awk '$1=$1'
foo foo bar bar
なぜこれが起こるのですか?
ベストアンサー1
つまり、フィールド変数に値を割り当てるときです。値は$1
フィールドに割り当てられ、$1
awkは実際にそれをデフォルトのフィールド$0
区切り文字(またはOFS
スペース)に関連付けて再構成します。
次のシナリオでも同じ状況が発生する可能性があります。
echo -e "foo foo\tbar\t\tbar" | awk '$1=$1'
foo foo bar bar
echo -e "foo foo\tbar\t\tbar" | awk -v OFS=',' '$1=$1'
foo,foo,bar,bar
echo -e "foo foo\tbar\t\tbar" | awk '$3=1'
foo foo 1 bar
GNU AWKの場合、この動作はここに文書化されています。
https://www.gnu.org/software/gawk/manual/html_node/Changing-Fields.html
$1 = $1 # 強制記録の再編成