フィールドセパレータを[^0-9]+
に設定しているので、awk
は次のように理解しています。すべてが桁区切りです。
$ awk -F '[^0-9]+' '{for (i=1;i<=NF;i++) printf "line=%d. field num %d is --> %s\n", NR, i, $i}' file
line=1. field num 1 is -->
line=1. field num 2 is --> 101
line=1. field num 3 is -->
line=2. field num 1 is -->
line=2. field num 2 is --> 104
line=2. field num 3 is -->
line=3. field num 1 is -->
line=3. field num 2 is --> 107
line=3. field num 3 is -->
ですが、なぜでしょう:
#field1 field3
#<| |>
# /sys/devices/system/memory/memory101/state:offline
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
# FS ^^^ FS
# field2
この方法では、あなたの文字列のほとんどすべては、フィールド区切りになり? awk
はフィールドを設定するため、
FSまでのすべてに1番目を設定し、1番目のFSから2番目のFSまで2番目を設定します。これを要約することができます。この場合はそう
$ awk -F ';' '{for (i=1;i<=NF;i++) printf "line=%d. field num %d is --> %s\n", NR, i, $i}' <<< ";hello;"
line=1. field num 1 is -->
line=1. field num 2 is --> hello
line=1. field num 3 is -->
あなたはFS
はかなり複雑なものになっている、:最後に、最後のフィールド($NF
)は、レコードの最後まで、最後のFSからのすべてで構成されてい(したがって空)、だから何awk
、この場合にはやっていることはFS anything but 3
を使用して文字列abcde3fghi
を分割することです
$ awk -F '[^3]+' '{for (i=1;i<=NF;i++) printf "line=%d. field num %d is --> %s\n", NR, i, $i}' <<< "abcde3fghi"
line=1. field num 1 is -->
line=1. field num 2 is --> 3
line=1. field num 3 is -->
最初のフィールドであることを最初のFSの前にすべてのものを作る:FSは3
何でもありの例とtの後のすべて彼はFSの最後の出現を最後のフィールド(従って空でもある)とする。これにより、空ではない1つのフィールド、つまり2番目のフィールドが残されます。この行の
に適合していないので、それは良いでしょう文字列の特定の部分を数字とともに印刷したいと思うので、あなたの正確な期待される出力が何であるかを明確にするために[編集]してください。 – fedorqui
キャラクターは*キャレットと呼ばれます*カラットはダイヤモンド重量と金の純度の単位です。 – tripleee