将文字字符串用于gawk

将文字字符串用于gawk,awk,gawk,Awk,Gawk,我觉得我已经太接近这个问题了,我只能靠自己解决它,但我相信它很容易解决 我正在为我的Raspberry PI开发一个带有SHELL脚本的NAS,它可以自动收集数据并将数据分发到我的其他设备上。所以我决定加入一个删除选项,否则删除一个文件会很麻烦,因为覆盆子总是从其他设备上直接复制回来。脚本运行时会创建一个文件:del_tmp_$ip.txt,其中包含要从del_$ip.txt(不是del_tmp_$ip.txt)中删除的目录和文件。 看起来是这样的: test/delete_me.txt tes

我觉得我已经太接近这个问题了,我只能靠自己解决它,但我相信它很容易解决

我正在为我的Raspberry PI开发一个带有SHELL脚本的NAS,它可以自动收集数据并将数据分发到我的其他设备上。所以我决定加入一个删除选项,否则删除一个文件会很麻烦,因为覆盆子总是从其他设备上直接复制回来。脚本运行时会创建一个文件:del_tmp_$ip.txt,其中包含要从del_$ip.txt(不是del_tmp_$ip.txt)中删除的目录和文件。 看起来是这样的:

test/delete_me.txt
test/hello/hello.txt
pi.txt
我试图删除viáawk这几行,这就是我现在所做的:

while read r; do
 gawk -i inplace '!/^'$r'$/' del_$ip.txt
done <del_tmp_$ip.txt
读取r时
;做
目瞪口呆-我在原地“!/^”$r“$/”del_$ip.txt

done在awk对shell变量求值之前,决不允许shell变量展开成为awk脚本文本的一部分(这就是您使用
!/^'$r'$/'
所做的),并且始终引用您的shell变量(因此正确的shell语法应该是
!/^'$r'$/'
,如果它不是错误的方法的话)。编写该命令的正确语法应该是

awk -v r="$r" '$0 !~ "^"r"$"' file
但是您说您需要的是字符串比较,而不是regexp,所以它很简单:

awk -v r="$r" '$0 != r' file
当然,您根本不需要shell循环:

while read r; do
 gawk -i inplace '!/^'$r'$/' del_$ip.txt
done <del_tmp_$ip.txt

决不允许shell变量在awk对其求值之前展开成为awk脚本文本的一部分(这是您使用
!/^'$r'$/'
)并始终引用您的shell变量(因此,如果不是错误的方法,正确的shell语法应该是
!/^'$r'$/'
)。编写该命令的正确语法应该是

awk -v r="$r" '$0 !~ "^"r"$"' file
但是您说您需要的是字符串比较,而不是regexp,所以它很简单:

awk -v r="$r" '$0 != r' file
当然,您根本不需要shell循环:

while read r; do
 gawk -i inplace '!/^'$r'$/' del_$ip.txt
done <del_tmp_$ip.txt

我想你可以简单地使用grep-Fvxf'del_tmp_$ip.txt''del_$ip.txt'
实际上是有效的。正如我所说的,我一直在努力解决那个问题,以至于找不到另一个解决办法。非常感谢。我认为您可以简单地使用
grep-Fvxf'del_tmp_$ip.txt''del_$ip.txt'
实际有效。正如我所说的,我一直在努力解决那个问题,以至于找不到另一个解决办法。非常感谢。可能重复的