gpt4 book ai didi

linux - AWK 或 bash 配置文件正在向标准输出添加不需要的颜色代码

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:52 28 4
gpt4 key购买 nike

您好,我正在使用 AWK 向我们的集群生成一堆提交。

$ls myfiles* | awk '{for(i=1;i<101;i++){print("qsub -d `pwd` -v FILE="$1",NUM="i" -N "$1" run.qsub")}}'

产生类似 -

qsub -d `pwd` -v FILE=myfiles100.txt,NUM=100 -N myfiles100.txt run.qsub

除了在 awk 语句中被替换的变量 $1 (myfiles100.txt),以绿色语法突出显示。我不知道这是由于我的 bash 配置文件还是 AWK 造成的,但我以前从未见过。当我将其重定向到标准输出时,问题就来了。

$ls myfiles* | awk '{for(i=1;i<101;i++){print("qsub -d `pwd` -v FILE="$1",NUM="i" -N "$1" run.qsub")}}' > somefile.txt

当我打开 somefile.txt 时

qsub -d `pwd` -v FILE=^[[0m^[[32mmyfiles100.txt^[[0m,NUM=100 -N ^[[0m^[[32myfiles100.txt^[[0m run.qsub

颜色代码也被插入,但是当我对调度程序执行这些作业时,这会导致混淆。我可以使用一个不错的 sed 命令删除颜色代码。

sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g"

但必须有一些我缺少的设置才能使事情变得更容易。

最佳答案

You're not supposed to parse the output of ls .

在您的具体情况下,这样做会更好:

printf '%s\n' myfiles* | awk '{for(i=1;i<101;i++){print("qsub -d `pwd` -v FILE="$1",NUM="i" -N "$1" run.qsub")}}'

这里有一个纯粹的 Bash 可能性来实现你想要的:

for file in myfiles*; do
for i in {1..100}; do
printf 'qsub -d "$PWD" -v FILE=%q,NUM=%d -N %q run.qsub\n' "$file" "$i" "$file"
done
done > somefile.txt

我使用 %q 打印文件名的地方,以防文件名包含空格或其他有趣的符号:这些将被正确引用(当然,这是假设您的命令将被执行通过 Bash 在集群上)。我还使用了 "$PWD" 而不是您的 `pwd`,这样每次执行命令时您都会保存一个子 shell。

关于linux - AWK 或 bash 配置文件正在向标准输出添加不需要的颜色代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641385/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com