我正在尝试迭代一些子目录文件,将唯一的目录名称保存到名为“basename”的字符串中,然后将第一列和第四列打印到使用该基本名称的新文件中,然后将带有基本名称的标头添加到这些文件中两列。
我已经做到了:
for d in *_kallisto/ ; do
basename="${d%_kallisto/}"
#echo $basename
awk '{print $1,$4}' "$d"abundance.tsv > "$basename"_counts.tsv
sed -i '1 i "$basename"\t"$basename"' "$basename"_counts.tsv
done
它基本上可以工作,但有两个问题:
$基本名称 $基本名称
target_id est_counts
成绩单/4818 2.80969
文字记录/4840 2897.99
成绩单/4868 33.588
请帮忙!预先感谢。
不要将变量命名为
basename
,因为这是 Unix 工具的名称,并且当您使用 sed
时,您永远不需要 awk
。
至少你的问题的一部分是你的
sed
命令:
sed -i '1 i "$basename"\t"$basename"' "$basename"_counts.tsv
sed 脚本包含在单引号中,因此 shell 无法扩展变量,这就是为什么您会在输出文件中看到文字字符串 `"$basename"。