いくつかの変換を実行するスクリプトがあります。結果を特定のフォルダに保存するには、スクリプトが読み込み、そこから文字列を取得するファイル(csvファイル)があります(現在はecho / sed / awkを使用してこれを行います)。
これが私が試す方法です。
# creating output directory
PNAME=$( echo -n "$(sed '4q;d' ${FOLDER}/SampleSheet.csv| sed -e 's/Experiment Name,//')")
echo $PNAME
mkdir /fs/pool/pool-bcfngs/fastq_files/${PNAME}/
問題は、このコマンドを使用すると、常にフォルダ名に\ rを追加してサブフォルダを自動的に作成できないことです。
たとえば、私が探したい文字列は次のようになります。
sed '4q;d' 171213_NB500982_0018_AHH7CNAFXX/SampleSheet.csv
Experiment Name,P030
私が得た結果は
P030^M
ただし、新しい行が挿入されます。変数にP030を追加せずにP030エントリを抽出する方法はありますか?
ベストアンサー1
\r
キャリッジリターン文字は、WindowsスタイルのCRLF行の末尾に表示されるC表記です。 Unixの一般的なテキスト処理ツールはそれをプレーン文字として扱います。
したがって、sed
sの観点から問題の行は次のようになります(私が間違っていない場合)。
Experiment Name,P030\r
tr -d '\r'
dos2unix
、またはでファイルを実行して、各行sed -e 's/\r$//'
からCRを削除できます。あるいは、結果の文字列も同じです。または、必要な文字列を取得するsed式を変更して処理します。これは、ラインの他の後のごみにも当てはまります。
たとえば、固定ラベルの後の英数字以外の行からすべての内容が削除されます。
| sed -e 's/.*Experiment Name,\([[:alnum:]]*\).*/\1/'
(\(..\)
一致する文字列の一部を保存(「キャプチャ」)し、\1
最初のグループを参照するために使用されます。)