.cshrc
複数のコンピュータの初期化ファイルでこのコードを見たことがあります。私は経験したいくつかの奇妙なチュートリアルそれがどのように機能するかを理解しようとしますが、それでも復号化できません。
setenv PATH `echo $PATH | awk 'NF&&\\!x[$0]++' RS='[:|\n]' | paste -sd:`
それは何をしますか?
ベストアンサー1
バックスラッシュは私には適していませんが、次のように説明できます。
echo "$PATH" | awk 'NF && !x[$0]++' RS='[:|\n]'
レコード区切り文字( RS
)は ":", "|"文字と改行文字のいずれかに設定されます。$PATH
通常、要素は「:」で区切られた1行です。これにより、awkはパスが ":"で区切られていないように動作しますが、各パスは独自の行にあります。
NF
空行(NF == 0
)が無視されることを示します。x
パスで索引付けされた関連配列。 0より大きい場合、!x[$0]++
「行」を無視することを示します。その結果、各行は一度だけ出力されます。x[$0]
最初の実行中に増加するため、x[$0]
後続の実行では!x[$0]
偽です。
この例では、最後の行以降のすべての要素が処理される頻度を示します。
echo "a:b:a:c:a:b" |
awk 'NF && !x[$0]++;END {for (var in x) print var ": " x[var]}' RS='[:|\n]'
a
b
c
a: 3
b: 2
c: 1