word3,a,b,c,d,e
フィールド区切り文字()を含む最後のフィールドを印刷するには,
?
1行に3つの単語/文字列のみがあり、構造は次のとおりです。
タイプ、パラメータ、値
ただし、値には、エスケープされていないフィールド区切り文字自体を含めることができます。ライン例:
echo word1,word2,word3,a,b,c,d,e | awk -F "," '{print $3}'
次のように印刷されます。
word3
予想される結果:
word3,a,b,c,d,e
他の例
echo 32637,921763.373,str84,str42,struj,str56,str65 | awk -F "," '{print $3}'
予想される結果:
str84,str42,struj,str56,str65
ベストアンサー1
したがって、最後のフィールドword1,word2,word3,a,b,c,d,e
はe
で、3番目のフィールドはですword3
。 3番目のフィールドから始まる行部分が欲しいようです。以下を使用する方が簡単ですcut
。
$ echo word1,word2,word3,a,b,c,d,e | cut -d , -f 3-
word3,a,b,c,d,e
-f 3-
-f x-y
x〜yフィールドに適用されますが、省略されて3番目のフィールドから最後のフィールドにy
移動します。
行に3つ以上のフィールドが含まれているとします。 2つのフィールドを含む入力行に空の出力行を提供し、コンマが含まれていない場合は、行を変更せずに残します(-s
区切られていない行をスキップするオプションを追加できます)。
$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -d , -f 3-
a
c
c,d
$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -sd , -f 3-
c
c,d
これにより、awk
次のことができます。
$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,[^,]*,/, "")'
c
c,d
(awk 'sub(/^([^,]*,){2}/, "")'
このバリエーションはPOSIXですが、正規表現演算子をサポートawk
していない実装がまだあるため、移植性が低下します。){x,y}
最初の2つのフィールドを削除して削除された行のみを印刷する場合と同様に、awk
prettificationとして使用されます。sed
sed -n 's/^[^,]*,[^,]*,//p'
または:
$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,?[^,]*,?/, "")'
c
c,d
3つ未満のフィールドを持つ行に空白行を印刷します。