0

以下で構成される大きなファイル (約 39,000 行のテキスト) があります。

1:iowemiowe093j4384d
2:98j238d92dd2d
3:98h2d078h78dbe0c
(continues in the same manner)

行の 2 つのセクションの順序を逆にする必要があるため、出力は次のようになります。

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3

代わりに、カットを使用してこれを実行しようとしましたが、適切に動作させることができませんでした (これは bash 環境にあります)。これを行うための最良の方法は何でしょうか?

4

3 に答える 3

7
awk -F: '{print $2":"$1}' input-file

または

awk -F: '{print $2,$1}' OFS=: input-file

2 つ以上のフィールドがある場合:

awk -F: '{print $NF; for(i=NF-1; i; i-- ) print ":"$i }' input-file

または

perl -F: -anE '$\=:; say reverse @F' input-file

また

perl -F: -anE 'say join( ':',  reverse @F)' input-file

(両方の perl ソリューションはテストされておらずchop $F[-1]、入力の改行を削除するために a または類似のものを必要とする、欠陥があると思います。)

于 2012-10-27T02:43:40.950 に答える
0

純粋な Bash であり、William Pursell の awk ソリューションとほぼ同じ速度ですが、エレガントではありません。

paste -d: <(cut -d: -f2 input-file) <(cut -d: -f1 input-file) 
于 2012-10-27T10:22:10.223 に答える
0

を使用した片道GNU sed

sed -ri 's/([^:]+):(.*)/\2:\1/' file.txt

結果:

iowemiowe093j4384d:1
98j238d92dd2d:2
98h2d078h78dbe0c:3
于 2012-10-27T03:29:54.387 に答える