ファイルの列(正確な文字)をLinuxで交換する方法を知りたい(cut、awk、sedなどを使って助けてくれるもの) )。 私は、式全体(区切り記号を使用して)と単語全体をスワップする方法を見てきました。ファイルの列を入れ替える - Linux(正確な位置、単語ではない)
例:5でカラム3の交換
128934
38 2008
:
123984
3802 08
これを依頼する別の方法は、5番目の各列の3文字を交換することになります。 SEDとビット扱いにくい
ファイルの列(正確な文字)をLinuxで交換する方法を知りたい(cut、awk、sedなどを使って助けてくれるもの) )。 私は、式全体(区切り記号を使用して)と単語全体をスワップする方法を見てきました。ファイルの列を入れ替える - Linux(正確な位置、単語ではない)
例:5でカラム3の交換
128934
38 2008
:
123984
3802 08
これを依頼する別の方法は、5番目の各列の3文字を交換することになります。 SEDとビット扱いにくい
:
$ sed -E 's/^(..)(.)(.)(.)/\1\4\3\2/' infile
123984
3802 08
これは、4つのグループの各行の最初の5つの文字を捕捉し、それらを並べ替えます。 -E
は便宜上のものです。それがなければ、\(.\)
のように括弧をエスケープする必要があります。
あなたはこの非POSIX準拠の例ではgawk、のmawk、nawkのとbusyboxのののawkでそれを行うことができます。
awk -v FS='' -v OFS='' '{ t=$3; $3=$5; $5=t } 1' infile
出力:
123984
3802 08
文字に分割するためのnull charをFSとして使用するのは、POSIXごとに定義されていない動作なので、GNU awk(多分他のもの)でしか動作しないことに言及する必要があります。 gawkはあなたが望むことをしますが、他の人たちは間違いなくYMMVではありませんが、GNUツールを持っていればはるかに簡単なアプローチです。 –
@エドモートン:お勧めします。私はそれをうまくテストしました:gawk、mawk、nawk、busybox awk – Thor
おかげで、うまくいきました。もし私が88th(ちょっとした例)で30th charを変更したいのであれば、唯一の問題は大きなファイルになります。あなたの答えのグループ(..)は本当に大きなもの(...... 29ドット...)で、ドットをたくさん書くのではなく、これを書き換える方法はありますか? –
'。{10}'は例えば10文字です。 –