awk
部分文字列の位置と長さが元の$ 0のフィールド位置に基づいている場合、$ 0の部分文字列を抽出する方法は?
これは、最初の項目を削除することと実質的に同じです。リーダーフィールドと最後追跡するフィールドと元の $0 で始まるすべてのフィールドの先頭と末尾の区切り文字
例: 現在の範囲は US$4 から US$8(含む) だけを知っています。
区切り文字はスペースおよび/または単一のコンマです。" , "
それとも","
...そして先行する区切り文字は無視されます。
Input: " a a a X marks the start, Y marks the end "
Expected Output: "X marks the start, Y"
ベストアンサー1
awkはフィールドの位置や区切り文字列を覚えていません。フィールドの場所を手動で検索する必要があります。あまり難しくありません。
echo " a b c X marks the start, Y marks the end " |
awk '{
i=1; n=1; tmp=$0; # i=field number, n=column number
while (match(tmp, / *, *| +/)) {
A[i]=n; B[i]=n+RSTART-1; # A[i],B[i] = start,end of delimiter i
++i; n+=RSTART+RLENGTH-1;
tmp=substr(tmp,RSTART+RLENGTH)
}
print substr($0, A[5], B[9]-A[5]) # start at 4+1 because the first field is empty
}'