打印输出问题:我们需要将以下awk打印到.sh文件中。 (删除第12列中所有“0”的行)
awk -F, '$12 != "0"' output.csv >> output2.csv
这是我们的脚本(案例循环是另一个目的所必需的。这是一个更大的脚本的一小步。假设$ 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'
不知道大师可能会有一些解决方案吗?谢谢!
答案 0 :(得分:0)
你需要看你的报价。在双引号内,单引号并不特别,但美元符号是。好的一点是,您可以连接多个引用的段,因此您可以在同一参数中的不同引用样式之间进行更改。
试试这个:
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
确保使用的是正确的版本。
答案 1 :(得分:0)
试试这个:
echo "awk -F, '\$12 != 0' ${TargetIDs}_output.csv >> ${TargetIDs}_output2.csv"
这当然假定您将第12列视为数值。