71

大きなファイル (幅 280 列、長さ 700 万行) にデータがあり、最初の 2 列を交換する必要があります。$2、$1、そしてファイルの最後までの範囲を出力するために、ある種の awk for ループでこれを行うことができると思いますが、範囲部分の実行方法がわかりません。また、$2 を出力することもできません。 、$1、$3...$280! ここで見た列スワップの回答のほとんどは、管理可能な列数を持つ小さなファイルに固有のものであるため、すべての列番号を指定することに依存しないものが必要です。

ファイルはタブ区切りです。

Affy-id chr 0 pos NA06984 NA06985 NA06986 NA06989
4

9 に答える 9

122

これを行うには、最初の 2 つのフィールドの値を交換します。

awk ' { t = $1; $1 = $2; $2 = t; print; } ' input_file
于 2012-08-15T10:35:48.040 に答える
26

タブで区切られたファイルを持つWindowsシステムでcygwinを使用してperrealの答えを試しました。標準の区切り記号はスペースであるため、機能しませんでした。

同じ問題が発生した場合は、代わりにこれを試してください。

awk -F $'\t' ' { t = $1; $1 = $2; $2 = t; print; } ' OFS=$'\t' input_file

入力セパレータは で定義され-F $'\t'、出力のセパレータは で定義されOFS=$'\t'ます。

awk -F $'\t' ' { t = $1; $1 = $2; $2 = t; print; } ' OFS=$'\t' input_file > output_file
于 2015-04-09T07:37:19.830 に答える
5

これはうまくいくかもしれません(GNU sed):

sed -i 's/^\([^\t]*\t\)\([^\t]*\t\)/\2\1/' file
于 2012-08-15T11:08:09.660 に答える
3

カットコマンドを使ってみましたか? 例えば

cat myhugefile | cut -c10-20,c1-9,c21- > myrearrangedhugefile
于 2012-08-15T10:42:35.227 に答える