您好,我在使用时遇到了一些问题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
?