繁体   English   中英

使用echo / printf在awk / sed脚本中打印出shell变量和“”

[英]Print out shell variables and “” in awk/sed script using echo/printf

一个打印输出问题:我们需要将以下awk打印到.sh文件中。 (删除第12列中所有具有“ 0”的行)

awk -F, '$12 != "0"' output.csv >> output2.csv

这是我们的脚本(case循环对于另一个目的是必要的。这是较大脚本的一小步。假设$ TargetIDs = 123):

case $TargetIDs in ($P1) echo "awk -F, '$12 != "0"' ${TargetIDs}_output.csv >> ${TargetIDs}_output2.csv" >> output.sh;

(*)  ;;

esac

这将在“ output.sh”中打印以下内容。 “ $ 12”中的“ $ 1”消失:(

awk -F, '2 != "0"' 123_output.csv >> 123_output2.csv

我们尝试一个数组:

 V="12"

 b=($V)

case $TargetIDs in ($P1) echo "awk -F, '${b[1]} != "0"' ${TargetIDs}_output.csv >> ${TargetIDs}_output2.csv" >> output.sh;

(*)  ;;

esac

这将在“ output.sh”中打印以下内容。 $ 12消失:

    awk -F, ' != 0' output.csv >> output2.csv

第二个问题是相似的:我们使用sed方法:

我们要打印此sed:

    sed -i.temp '/"0"/d' 123_output.csv.temp
    mv 123_output.csv.temp 123_output.csv

这是脚本

    case $TargetIDs in ($P1) printf "sed -i.temp '/"0"/d' ${TargetIDs}_output.csv.temp\n mv ${TargetIDs}_output.csv.temp ${TargetIDs}_output.csv\n" >> output.sh ;;

    (*)  ;;

    esac

这将在“ output.sh”中打印出以下内容:

sed -i.temp '/0/d' 123_output.csv.temp
mv 123_output.csv.temp 123_output.csv

sed命令在“ output.sh”中变为

sed -i.temp '/0/d'

代替

sed -i.temp '/"0"/d'

“”在“ output.sh”中消失了,因此所有具有零的行将被删除

sed -i.temp '/0/d'

想知道大师是否可能对此有一些解决方案? 谢谢!

您需要注意报价。 在双引号中,单引号并不特殊,但美元符号则不然。 令人高兴的是,您可以连接多个带引号的句段,因此可以在同一参数的不同引用样式之间进行更改。

尝试这个:

echo "awk -F, '"'$12 != "0"'"' ${TargetIDs}_output.csv >> ${TargetIDs}_output2.csv"

如果TargetIDs可能包含空格或shell元字符,则您还想在生成的文本中插入更多引号:

echo "awk -F, '"'$12 != "0"'"' \"${TargetIDs}_output.csv\" >> \"${TargetIDs}_output2.csv\""

根据评论中的讨论,两者之间存在差异:

awk -F, '$12 != "0"' output.csv >> output2.csv

awk -F, '$12 != 0' output.csv >> output2.csv

在字段12为00的情况下。 但是,如果要删除第12个字段为"0" ,这都不对,这似乎是第二个问题中sed行的要点。 为了赶上这一点,您需要:

awk -F, '$12 != "\"0\""' output.csv >> output2.csv

确保您使用的是正确的版本。

尝试这个:

echo "awk -F, '\$12 != 0' ${TargetIDs}_output.csv >> ${TargetIDs}_output2.csv"

当然,这假定您将第12列视为数字值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM