我有一个可以进行一些转换的脚本。为了能够将结果保存在特定文件夹中,我有一个文件(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 上常用的文本处理工具将其视为常规字符。
所以,从sed
s 的角度来看,有问题的行是这样的(如果我没猜错的话):
Experiment Name,P030\r
tr -d '\r'
您可以通过、 或dos2unix
或运行该文件,sed -e 's/\r$//'
以从每一行中删除 CR。或者对于结果字符串也是如此。或者通过更改获取所需字符串的 sed 表达式来处理它。这也适用于线路上的任何其他尾随垃圾。
例如,这将从行中删除所有内容,除了固定标签后面的字母数字之外:
| sed -e 's/.*Experiment Name,\([[:alnum:]]*\).*/\1/'
(\(..\)
用于保存(“捕获”)匹配字符串的一部分,并\1
引用第一个这样的组。)