私は約500行と480K列のファイルを持っていますが、最後に2,3,4列を移動する必要があります。私のファイルはカンマで区切られたファイルですが、awkやsedを使ってこれを手早く手配する方法はありますか?awkまたはsedを使用して列を整列しますか?
答えて
-
perl -F"," -lane 'print "@F[0]"," ","@F[4..$#F]"," ","@F[1..3]"' input.file
3,4,5を移動して2番目を削除します。 –
[by-by-oneエラー](http://martinfowler.com/bliki/TwoHardThings.html) –
カラムを簡単にコピーすることができます。移動は480Kカラムでは長すぎます。
$ awk 'BEGIN{FS=OFS=","} {print $0,$2,$3,$4}' input.file > output.file
どのようなデータ形式ですか?
これはゲノムデータです。私たちは450Kポジションごとに個体をテストしています。 – Mdhale
5つのフィールドでのテスト:
$ cat foo
1,2,3,4,5
a,b,c,d,e
$ cat program.awk
{
$6=$2 OFS $3 OFS $4 OFS $1 # copy fields to the end and $1 too
sub(/^([^,],){4}/,"") # remove 4 first columns
$1=$5 OFS $1 # catenate current $5 (was $1) to $1
NF=4 # reduce NF
} 1 # print
が実行それ:
$ awk -f program.awk FS=, OFS=, foo
1,5,2,3,4
a,e,b,c,d
だから理論的には、この作業をする必要があります:
{
$480001=$2 OFS $3 OFS $4 OFS $1
sub(/^([^,],){4}/,"")
$1=$480000 OFS $1
NF=479999
} 1
はEDIT:それは仕事をしました。
私が理解しているのは、480,000ではない480,000列です。 – karakfa
おそらくperlの:
perl -F, -lane 'print join(",", @F[0,4..$#F,1,2,3])' file
または
perl -F, -lane '@x = splice @F, 1, 3; print join(",", @F, @x)' file
別のアプローチ:正規表現
perl -lpe 's/^([^,]+)(,[^,]+,[^,]+,[^,]+)(.*)/$1$3$2/' file
500行ファイルとのタイミングを、48万フィールドを含む各ライン
$ time perl -F, -lane 'print join(",", @F[0,4..$#F,1,2,3])' file.csv > file2.csv
40.13user 1.11system 0:43.92elapsed 93%CPU (0avgtext+0avgdata 67960maxresident)k
0inputs+3172752outputs (0major+16088minor)pagefaults 0swaps
$ time perl -F, -lane '@x = splice @F, 1, 3; print join(",", @F, @x)' file.csv > file2.csv
34.82user 1.18system 0:38.47elapsed 93%CPU (0avgtext+0avgdata 52900maxresident)k
0inputs+3172752outputs (0major+12301minor)pagefaults 0swaps
、純粋なテキスト操作は勝者
$ time perl -lpe 's/^([^,]+)(,[^,]+,[^,]+,[^,]+)(.*)/$1$3$2/' file.csv > file2.csv
4.63user 1.36system 0:20.81elapsed 28%CPU (0avgtext+0avgdata 20612maxresident)k
0inputs+3172752outputs (0major+149866minor)pagefaults 0swaps
これを行うためにPerlスクリプトを作成しましたが、これも確認できます。 – Mdhale
'time'を使って480000 colsのタイムを持つ1レコードの後者は、平均で少し速かった。 –
別の技術、ちょうどbashのである:あなたが解決策の下に試すことができ
while IFS=, read -r a b c d e; do
echo "$a,$e,$b,$c,$d"
done < file
- 1. インデックスファイルのawk/sedを使用した再配置文字列
- 2. awk/sedを使用した再配置文字列
- 3. piping sed | awkまたはawk | sed
- 4. awkまたはsedを使用した特定のデータフォーマット
- 5. sed、awkまたはgrepを使用してデータを抽出する
- 6. sedまたはawkを使用して日付形式を修正する
- 7. awkを使用してテキストファイルの列を揃えますか?
- 8. xyzはsedまたはawkを使って座標を操作します
- 9. シェルプログラミングまたはSED/AWK
- 10. AWKを使用してコマンドの出力を調整します
- 11. テーブルまたはcolspanを使用しない列の整列
- 12. AWKまたはPERLを使用して文字列を分割する
- 13. 変数を使用して書式を整列しますか?
- 14. 整列APIを使用したrdf整列からのowl整列生成エラー
- 15. 整数を文字列として使用しますか?
- 16. ブートストラップ3は 'btn-group'を使用して整列します
- 17. AWKを使用してデータセットから特定の列を抽出します
- 18. sedまたはawkを使用して文字列を検索し、XML文書内のテキストを変更します
- 19. grepまたはsedを使用してファイル内の文字列をカウントしますか?
- 20. Windowsでgrep、sed、awkを使用したシェル
- 21. "sedまたはawk"を使用してbashの行から最後のカンマを削除する方法
- 22. ctypesを使用して整数配列を置換します
- 23. 特定の列をヘッダー名でスペースで表示します(awk、sed)
- 24. AWK/SEDを介して文字列から特定の番号を出力
- 25. (覚えておいてください)Awk/SED/Echoを使用してCSVの列エントリを削除する
- 26. awk配列を使用して別のフィールドに基づいて重複列を削除しますか?
- 27. AWK:新しい列が正しく整列しない
- 28. sedまたはperlを使用した複数行の文字列検索
- 29. 継承されたCSSを使用してチェックボックスを整列させますか?
- 30. xsltを使用したテーブルの整列
'ペーストを-d 、<(cut -d、-f1,5-input.txt)<(cut -d、-f2-4 input.txt) ' – twalberg
何よりも速い?これまでに試したことと、簡潔でテスト可能なサンプル入力と期待される出力を表示するための質問を[編集]してください。すなわち、 [mcve]を提供する。 –