次のawkステートメントは期待どおりに機能しています。
awk '{print $1, $2, $3}' test.txt
しかし、2番目の列の後にすべての列が必要であるとどのように言うのですか?
awk '{print $1, $2, $3 to $NF}' test.txt
3番目の列からその行の終わりまでのすべての列が必要です。2〜10列にすることができ、すべてが最後の列の一部と見なされます。
次のawkステートメントは期待どおりに機能しています。
awk '{print $1, $2, $3}' test.txt
しかし、2番目の列の後にすべての列が必要であるとどのように言うのですか?
awk '{print $1, $2, $3 to $NF}' test.txt
3番目の列からその行の終わりまでのすべての列が必要です。2〜10列にすることができ、すべてが最後の列の一部と見なされます。
$3-$NF
フィールドだけが必要な場合、標準的な方法はループ( for/while
)です。
ただし、要件に応じて、次のことができます。
awk '{$1=$2="";}sub("^ *","")'
例えば:
kent$ seq -s' ' 10|awk '{$1=$2="";}sub("^ *","")'
3 4 5 6 7 8 9 10
100個のフィールドを3つのグループに「グループ化」する場合:1、2、3-100:
awk '{x=$0;sub($1FS$2,"",x);gsub(FS,"",x);print $1,$2,x}'
同じ例:
kent$ seq -s' ' 10|awk '{x=$0;sub($1FS$2,"",x);gsub(FS,"",x);print $1,$2,x}'
1 2 345678910
それがあなたが望むものであることを願っています。
直感的な方法。
awk 'BEGIN{ORS=""} {for(i=3; i<=NF; i++) if(i != NF){print $i " "} else {print $i "\n"}}' test.txt
もう少し:
awk '{$1=$2=x; $0=$0; $1=$1}1' file
awk '{$1=$1; sub($1 FS $2 FS,x)}1' file
間隔を保つには:
awk 'sub($1 "[ \t]*" $2 "[ \t]*",x)' file