33

基本的にRで開くことができない非常に大きな遺伝子型ファイルがあるため、Linuxコマンドラインを使用して目的の行と列を抽出しようとしています。行は頭/尾を使用して十分に簡単ですが、列を処理する方法を理解するのに苦労しています。

を使用して、100〜105番目のタブまたはスペースで区切られた列を抽出しようとすると(たとえば)

 cut -c100-105 myfile >outfile

各列に複数の文字の文字列がある場合、これは明らかに機能しません。列がスペースまたはタブ (またはその他の文字) で区切られて定義されている列内の文字列全体を抽出するように、適切な引数でカットを変更する方法はありますか?

4

2 に答える 2

36

コマンドが区切り文字としてタブとスペースの両方で機能する必要がある場合は、次を使用しますawk

awk '{print $100,$101,$102,$103,$104,$105}' myfile > outfile

5 つのフィールドを指定する必要がある限り、それらを入力するだけで問題ありません。より長い範囲では、forループを使用できます。

awk '{for(i=100;i<=105;i++)print $i}' myfile > outfile

を使用する場合は、次のオプションcutを使用する必要があります。-f

cut -f100-105 myfile > outfile

フィールド区切り文字が異なる場合は、TAB次を使用して指定する必要があります-d

cut -d' ' -f100-105 myfile > outfile

cut コマンドの詳細については、man ページを確認してください。

于 2013-11-13T16:58:20.210 に答える
11

次のような区切り文字でカットを使用できます。

スペース区切りあり:

cut -d " " -f1-100,1000-1005 infile.csv > outfile.csv

タブ区切り付き:

cut -d$'\t' -f1-100,1000-1005 infile.csv > outfile.csv

間隔のリストを抽出できるカットのバージョンを提供しました...

それが役に立てば幸い!

于 2013-11-13T16:58:32.053 に答える