尊敬的各位领导
顺便说一下你的成语。替换代码0】应该避免。请参考。 危险的反击
while read f echo "fastq/${f}/_1.fastq.gze" done < files.csv
forever :
我不知道问题出在哪里,我在变量f后面添加的任何字符串,都会取代f前面的字符串,这是你代码的结果。/_1.fastq.ge_11
Yoda :
你能否设置 xtrace 和 verbose ,运行你的脚本并公布输出。#!/bin/bash -xv
xtrace
verbose
chepner :
虽然这样做是正确的,但这并不能解决眼前的问题。它作为一个评论比一个答案更合适。
tripleee 发布于 2017-11-24
0 人赞同
你可以用 xargs 和 printf 把它变成一个单行字。 xargs printf 'fastq/%s_1.fastq.gze\n' <files.csv 替换代码1】的功能是将第一个参数(格式字符串)依次应用于每个参数。 替换代码0】说的是在命令行上能容纳多少文件就运行多少命令(如果输入文件太大,无法在一个命令行上容纳所有的参数,就把它分成多个调用,这要取决于你内核中的ARG_MAX常数)。
你可以用 xargs 和 printf 把它变成一个单行字。
xargs
printf
xargs printf 'fastq/%s_1.fastq.gze\n' <files.csv 替换代码1】的功能是将第一个参数(格式字符串)依次应用于每个参数。 替换代码0】说的是在命令行上能容纳多少文件就运行多少命令(如果输入文件太大,无法在一个命令行上容纳所有的参数,就把它分成多个调用,这要取决于你内核中的ARG_MAX常数)。
替换代码1】的功能是将第一个参数(格式字符串)依次应用于每个参数。
替换代码0】说的是在命令行上能容纳多少文件就运行多少命令(如果输入文件太大,无法在一个命令行上容纳所有的参数,就把它分成多个调用,这要取决于你内核中的ARG_MAX常数)。
ARG_MAX
John C 发布于 2017-11-24
一般来说,你最好的办法是用大括号包住变量名。 因此,在这种情况下。 echo fastq/${f}_1.fastq.gz See 这个答案 关于一般概念的一些细节,也是如此。 Edit : 看了现在提供的输出,我觉得这根本不是一个编码问题,而是行尾和终端/控制台程序之间的冲突。 具体来说,如果CSV文件只用回车(ASCII/Unicode 13)来结束其行, Sample_11 的结尾可能会 "倒退 "到行的开头并覆盖。 在这种情况下,松散地基于 本条 我建议将 cat (如果你不想用 while 这样的东西来重新架构实际的脚本的话)替换成能够剥离回车的东西,比如说。 for f in $(tr -cd '\011\012\040-\176' < temp.csv) echo fastq/${f}_1.fastq.gze
一般来说,你最好的办法是用大括号包住变量名。 因此,在这种情况下。
echo fastq/${f}_1.fastq.gz
See 这个答案 关于一般概念的一些细节,也是如此。
Edit : 看了现在提供的输出,我觉得这根本不是一个编码问题,而是行尾和终端/控制台程序之间的冲突。
具体来说,如果CSV文件只用回车(ASCII/Unicode 13)来结束其行, Sample_11 的结尾可能会 "倒退 "到行的开头并覆盖。
Sample_11
在这种情况下,松散地基于 本条 我建议将 cat (如果你不想用 while 这样的东西来重新架构实际的脚本的话)替换成能够剥离回车的东西,比如说。
cat
while
for f in $(tr -cd '\011\012\040-\176' < temp.csv) echo fastq/${f}_1.fastq.gze