3

このツールを使用すると、タブ区切りまたはcsvファイルのヘッダーを変更する方がはるかに簡単だと思うので、awkをいじっていました..

2 種類のファイル (コンマまたはタブ区切り) があり、ヘッダー (NR =1) を次のように変更するだけです。

  1. すべての単語の大文字小文字を下げる
  2. 各フィールド名のスペースをアンダースコアに置き換えます。がんの種類を *cancer_type* に変更します

がんの種類、アセンブリ バージョン、染色体、染色体の開始、染色体の終了

これまでになんとかしたことは、最初の行をリストすることだけです

awk 'NR == 1' test2.csv

さて、私は途方に暮れています。いずれにしても、ダウンストリームの変更を行う前に、おそらくこのスクリプト (sed または awk) を実行します。

どんな助けでも(または良いチュートリアル/ワンライナーを教えて)いただければ幸いです。

編集

こんにちは、これを明確にするために編集する必要があります。ファイルから開始し、同じファイルで終了しますが、ヘッダーが変更されています。

ファイルの 2 つのバージョンを取得できました。

CSV

がんの種類、アセンブリ バージョン、染色体、染色体の開始、染色体の終了

後:

がんの種類、アセンブリのバージョン、染色体、染色体の開始、染色体の終了

TSV

がんの種類\t アセンブリ バージョン\t 染色体\t 染色体開始\t 染色体終了

後:

がんの種類\t アセンブリのバージョン\t 染色体\t 染色体の開始\t 染色体の終了

とは言っても、アプローチはほとんど機能していると思います..

EDIT 2 OSはOS X 10.7.+です

4

5 に答える 5

4

GNU

sed -r '1 {s/.*/\L&/;s/\b\s\b/_/g}' infile>outfile

$ echo Cancer Type, Assembly Version, Chromosome, Chromosome start, Chromosome end|sed -r '1 {s/.*/\L&/;s/\b\s\b/_/g}'
がんの種類、アセンブリのバージョン、染色体、染色体の開始、染色体の終了
于 2013-07-20T17:30:06.620 に答える
2

私がよく理解していれば、OPは結果をコンソールに出力するだけでなく、元のファイルのヘッダーを置き換えたいと考えています。

で解決しようとしましたが、よく知っています。ただし、にはインプレース編集機能がないため、の回避策が必要です。

# Unsafe hack
#{ rm infile; awk 'NR==1{...}1' >infile;} <infile
#Ed Morton's correction
awk 'NR==1{...}1' infile >tmp && mv tmp infile

これは機能しますがforkrmコマンドに余分に 1 つ使用します。インプレース編集を使用することをお勧めします。またはがこの機能をサポートしています。perl を使用するのは少しやり過ぎなので、capthaソリューションを少し修正しました。

sed -i '1{s/\b \b/_/g;s/[[:upper:]]/\L&/g;}' infile

前のインファイル:

Cancer Type, Assembly Version, Chromosome, Chromosome start, Chromosome end
One 1,Two 2

次の後の infile:

cancer_type, assembly_version, chromosome, chromosome_start, chromosome_end
One 1,Two 2
于 2013-07-20T19:55:56.237 に答える
2

ヘッダーのみを変更して残りの行をそのまま印刷する場合は、次のようにしてみてくださいGNU awk

awk 'BEGIN{FS=OFS=","}NR==1{$0=tolower($0);gsub(/\y \y/,"_",$0)}1' csv 
于 2013-07-20T18:05:58.460 に答える
0

こんにちは、両方のコマンドが機能しましたが、OS X の場合は、

brew install gnu-sed

次に、sedコマンドを実行します

gsed -i '1{s/\b \b/_/g;s/[[:upper:]]/\L&/g;}' infile

魔法..みんなありがとう。

于 2013-07-22T18:06:37.920 に答える