osxシェルでこれらの行を含むストリームが与えられると、最初のトークンはキーであり、行の最初の文字は常に一致し、残りのトークンは常に数字だけで、その数字は可変であり、単一の[a-z]
スペースのみを区別します。トークン:
key [1] [...] [n]
---- --------------------
key1 17 89 52
key2 5 189 6 3 5 21
交換を繰り返し実行せずに、次の出力(各行のトークン数とは無関係)をどのようにエクスポートできますか?
17 key1
89 key1
52 key1
5 key2
189 key2
6 key2
3 key2
5 key2
21 key2
(キーと数字を変更したり、各行をスペースで区切ったりするのではなく、改行文字を使用してくださいkey1 17 key1 89 key1 52
。
現在、sed
キーがない次の番号ごとに連続置換を使用していますが、これは非効率的であり、最大トークン数よりも多くの回数をパイプする必要があるため、増加するsed
可能性があります(そうでなければここにある理由を推測します)。 ?):
sed -E 's/^([a-z][^ ]*) ([0-9]+) /\2 \1\n\1 /g' filename.txt | sed ... | sed ...
私がそれについて掘り下げる時間があれば、awk
これがうまくいくと確信しています。おそらく、cut
タスクを実行したりトークンを効率的に使用したりできる他のツールの1つです。
コードと処理時間の点でこれを効率的に実行するにはどうすればよいですか?
ベストアンサー1
これを達成するためにawkを使用することができます
awk '{ for(i = 2; i <= NF; i++) { print $i,$1; } }' file
forループは2番目のフィールドから最後のフィールドに移動し、各フィールドを印刷し、最初のフィールドを追加します。