新来的人有一个问题,希望有一个简单的解决方案,但我似乎无法管理。
因此,我有大量需要使用相同命令行程序处理的文件,并且我正在尝试编写一个小的 shell 脚本来自动执行此操作。我写了一些东西,它将从文本文件中读取输入文件名,并对每个文件重复该命令。到目前为止,一切都很好。我的问题是命名输出。每个文件都以通用格式“lane_number_bla_bla_bla”命名,并成对处理。因此,将有一个“lane_1_bla_bla_bla_001”和“lane_1_bla_bla_bla_002”需要组合成一个输出文件。为此,我尝试使用 awk 从输入文件的 .txt 列表中读取样本编号,并将其解析为输出文件编号。这是我想出的代码(请注意,命令之前的 echo 语句仅用于测试;它' s 在运行实际程序时被删除;这也不是更复杂的实际命令,但原理仍然适用):
echo "Which input1 should I use?"
read text
input1=$text
echo "Which input2 should I use?"
read text
input2=$text
echo "How many lines?"
read text
n=$text
for i in $(seq 1 $n)
do
awkinput1=$(awk NR==$i $input1)
awkinput2=$(awk NR==$i $input2)
num=$(awk 'NR==$i{print $2 }' FS="_" $input1)
lane=$(awk 'NR==$i{print $1 }' FS="_" $input1)
echo "command $awkinput1.in > $awkinput1.out && command $awkinput2.in > $awkinput2.out && command cat $awkinput1.out $awkinput2.in > $num-$lane-CAT.out &"
if (( $i % 10 == 0 )); then wait; fi # Limit to 10 concurrent subshells.
done
当我运行它时,命令行中的两个 $awkinput 字段都会被适当的文件名正确替换,但不会打印任何内容的 $num 和 $lane 字段。
那么,我做错了什么?我确信这很简单,但是我尝试了很多不同的方法来格式化相关的 awk 命令,但似乎没有任何效果。我正在使用 SSH 协议的远程 linux 服务器上执行此操作,如果它有所作为的话。
非常感谢!