尊敬的各位领导

5 个评论
我假设Sample1(作为第一个字符串)和Sample2(作为第二个字符串),但变量在哪里?
SO不是一个免费的编码服务。请拿出一些最低限度的努力来自己解决这个问题
f是变量
你的输入文件有错误的行尾。 通过dos2unix运行它
欢迎来到 stackoverflow。你的问题是一个基本的shell脚本家的问题。一定要把它作为书签,并通读 stackoverflow.com/tags/bash/info before posting your next Q ;-) . Good luck.
linux
bash
forever
forever
发布于 2017-11-24
3 个回答
Yoda
Yoda
发布于 2017-11-24
0 人赞同

顺便说一下你的成语。替换代码0】应该避免。请参考。 危险的反击

while read f
    echo "fastq/${f}/_1.fastq.gze" 
done < files.csv
    
我不知道问题出在哪里,我在变量f后面添加的任何字符串,都会取代f前面的字符串,这是你代码的结果。/_1.fastq.ge_11
Yoda
你能否设置 xtrace verbose ,运行你的脚本并公布输出。#!/bin/bash -xv
虽然这样做是正确的,但这并不能解决眼前的问题。它作为一个评论比一个答案更合适。
tripleee
tripleee
发布于 2017-11-24
0 人赞同

你可以用 xargs printf 把它变成一个单行字。

xargs printf 'fastq/%s_1.fastq.gze\n' <files.csv

替换代码1】的功能是将第一个参数(格式字符串)依次应用于每个参数。

替换代码0】说的是在命令行上能容纳多少文件就运行多少命令(如果输入文件太大,无法在一个命令行上容纳所有的参数,就把它分成多个调用,这要取决于你内核中的ARG_MAX常数)。

John C
John C
发布于 2017-11-24
0 人赞同

一般来说,你最好的办法是用大括号包住变量名。 因此,在这种情况下。

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