在 bash 中迭代并保存具有新标题和名称的文件

问题描述 投票:0回答:1

我正在尝试迭代一些子目录文件,将唯一的目录名称保存到名为“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

它基本上可以工作,但有两个问题:

  1. 我得到名为“_counts.tsv”的子文件,但未添加基本名称。
  2. _counts.tsv 文件具有正确的列,但 sed 命令标题如下所示:

$基本名称 $基本名称

target_id est_counts

成绩单/4818 2.80969

文字记录/4840 2897.99

成绩单/4868 33.588

请帮忙!预先感谢。

bash for-loop unix awk sed
1个回答
0
投票

不要将变量命名为

basename
,因为这是 Unix 工具的名称,并且当您使用
sed
时,您永远不需要
awk

至少你的问题的一部分是你的

sed
命令:

sed -i '1 i "$basename"\t"$basename"' "$basename"_counts.tsv

sed 脚本包含在单引号中,因此 shell 无法扩展变量,这就是为什么您会在输出文件中看到文字字符串 `"$basename"。

© www.soinside.com 2019 - 2024. All rights reserved.