区切り記号の1つが4つの下線(1つではない)の場合、複数の区切り記号は機能しません。

区切り記号の1つが4つの下線(1つではない)の場合、複数の区切り記号は機能しません。
PWD=sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat

.2つを定義する必要があります。____

機能しない一般的な構文を使用しようとすると、4つの区切り文字[.____]として扱われます(と同じ____です)。_____

例:

basename $PWD
sgy_comp.20170328_090951.20170328_090730.d_0327____20170325_002526.seiscat

basename $PWD|awk -F[."____"] '{print $4}'
090951

報酬を受けるために頑張っていますd_0327。私が望む方法で動作しない理由を理解して動作させる正しい構文を探しています。

答え1

[<set>]マッチ一つ文字(次に展開)要素の構成一部のツールを使用し、場合によっては提供されているものから)<set>

[.____]特別な試合一つ文字(単._または、または、_または_)です_。言うまでもなく[.____]同じです[._]

2つの文字列のいずれかを一致させるには、|代替演算子が必要です。

awk -F '\\.|____' '{print $4}'

最新(および標準)を使用してawk次のように書くこともできます。

awk -F '\\.|_{4}' '{print $4}'

また、[...]シェルは[...]シェルワイルドカードでもあるため、引用符で囲む必要があります。あなたの場合は、____シェル部分のみを引用しました。_これはシェルにとって特別なものではないため、必要ありません。つまり、現在のディレクトリにorという-F[."____"]ファイルがある場合、シェルワイルドカードはに渡される前にそのファイルに展開されます。そうでない場合に渡されます(一部のシェルでは一致しないglobの代わりにエラーを報告しますが)。-F.-F_-F[."____"]awk-F[.____]awk

関連情報