如何从文件中的字符串创建文件夹?

如何从文件中的字符串创建文件夹?

我有一个可以进行一些转换的脚本。为了能够将结果保存在特定文件夹中,我有一个文件(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回车符是 C 表示法,它显示在 Windows 风格的 CRLF 行结尾中。Unix 上常用的文本处理工具将其视为常规字符。

所以,从seds 的角度来看,有问题的行是这样的(如果我没猜错的话):

Experiment Name,P030\r

tr -d '\r'您可以通过、 或dos2unix或运行该文件,sed -e 's/\r$//'以从每一行中删除 CR。或者对于结果字符串也是如此。或者通过更改获取所需字符串的 sed 表达式来处理它。这也适用于线路上的任何其他尾随垃圾。

例如,这将从行中删除所有内容,除了固定标签后面的字母数字之外:

| sed -e 's/.*Experiment Name,\([[:alnum:]]*\).*/\1/'

(\(..\)用于保存(“捕获”)匹配字符串的一部分,并\1引用第一个这样的组。)

相关内容