最後のフィールドを維持しながら、Linuxで複数の列名を短縮します。

最後のフィールドを維持しながら、Linuxで複数の列名を短縮します。

すべての列ヘッダーがパス名であるファイルがあります。各列ヘッダーを短くしたいと思います。~から次のようなもの:

/mydir/cat/dog/hen/test/block/sample1.so.rg.mk.bam /mydir/cat/dog/hen/test/block/sample2.so.rg.mk.bam

到着する:

sample1 sample2

Linuxでこれを行うにはどうすればよいですか?私のファイルには46〜100を超える列があるため、列名を手動で編集することはできません。私が望むファイル名の長さは、上記のようにそれぞれ7文字です。

ありがとう

ヘッダーにはファイル名が含まれます。各列ヘッダー/名前は次のとおりです。

/mydir/cat/dog/hen/test/block/sample1.so.rg.mk.bam 

私はその場にいたらいいのに

sample1

明確にするために、これは46列のテキストファイルです。各列ヘッダーまたは名前は、上記の長い文字列で表されます。各ヘッダーを7文字のバージョンに切りたいと思います。「サンプル1」…「サンプル46」

必須サンプルファイル(各列ヘッダーの下にデータを含む)

sample1 sample2 sample3 sample4 sample5 ...  

ベストアンサー1

元のファイルを短い名前の新しいファイルにコピーする短いプログラムを作成します。元のファイルをアーカイブすると、問題が発生した場合にバックアップが可能になります。作成する内容は、おなじみの言語によって異なります。これはBashのようなシェルでも、Java、C、Pearl、Pythonなどのすべての言語でもかまいません。

以下はいくつかの疑似コードです。 old は元のファイル、new は新しいファイルです。新規

begin a loop to read each  line in old
   read line from old
   delete all characters from line up to and including the last "/"
   delete delete all characters from line after the first 7
//This is what you want to save unless it conflicts with a previously saved line
   determine if you have a conflict.
   if there is a conflict
      add a number to the end of line to make it unique
   save line to new
   end of loop

おすすめ記事