[英]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.