在循环中向 .tsv 文件的开头添加一列?

在循环中向 .tsv 文件的开头添加一列?

您好,我在使用时遇到了一些问题awk在我在循环中创建的 .tsv 文件的开头添加一列。

我的代码如下(可以忽略循环的其余部分):

while IFS= read -r line
do
curl *URL.org* > ./folder/$line.tsv
sleep 60
awk '{print "$line\t" $0}' ./folder/$line.tsv > $line.tabbed
done < ./folder/<filetoread>.txt

所以基本上我有一个循环,我用它从curl命令创建一个tsv文件,并使用$line变量来创建一个文件。读取的文件只是一个单字标识符列表;

RUIAHT48
RUIAHT49
etc. 

我以为我可以用awk附加此 $line 变量以在每个新创建的文件中创建一个新列。

awk 命令之前输出;

$line  col1 col2  col3  col4    col5
$line  CLV_M   19     25    False   False
$line  CLV_P   59     63    False   False
$line  DEG_N   1      3     False   False
$line  DOC_C   10     14    False   False

期望的输出;

new      col1   col2    col3    col4    col5
<value>  CLV_M  19      25      False   False
<value>  CLV_P  59      63      False   False
<value>  DEG_N  1       3       False   False
<value>  DOC_C  10      14      False   False

其中新列的值全部相同,但实际值而不是字面上的“$line”。我这里哪里出错了?我实际上应该使用 awk 或其他更简单的命令吗?

谢谢 :)

答案1

您需要将变量传递给awk使用-v开关:

while IFS= read -r line
do
    curl *URL.org* > "./folder/$file.tsv"
    sleep 60
    awk -v line="$line" '{ OFS = "\t"; print line,$0}' "./folder/$line.tsv" > "$line.tabbed"
done < ./folder/<filetoread>.txt

您可以\t像在OP中所做的那样添加到输出中,但我会OFS使用awk.

另外,我不确定你在做什么,但你知道这$file.tsv似乎没有被使用吗?我想应该是这样吧$line.tsv

相关内容