Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk命令在不同的文件中查找_Awk - Fatal编程技术网

awk命令在不同的文件中查找

awk命令在不同的文件中查找,awk,Awk,为什么这不起作用?它会找到所有其他文件,但不会找到这个文件。唯一的区别是它的名字里有数字 awk -F= '$1=="Icon" {print $2}' "/usr/share/applications/hildon/dropn900.desktop" 它使用的文件 [Desktop Entry] Version=1.0.0 Encoding=UTF-8 Name=DropN900 Comment=Python based DropBox client Exec=/opt/dropn

为什么这不起作用?它会找到所有其他文件,但不会找到这个文件。唯一的区别是它的名字里有数字

awk -F= '$1=="Icon" {print $2}' "/usr/share/applications/hildon/dropn900.desktop"
它使用的文件

[Desktop Entry] Version=1.0.0 Encoding=UTF-8 Name=DropN900 Comment=Python based DropBox client Exec=/opt/dropn900/dropn900.py Icon=dropn900 X-Icon-path=/usr/share/icons X-Window-Icon=dropn900 Type=Application X-Osso-Type=application/x-executable [桌面输入] 编码=UTF-8 版本=1.0 类型=应用程序 Name=更快的应用程序管理器 Exec=fapman.launch Icon=fapman X-Osso-Type=应用程序/X-可执行文件 X-Osso-Service=org.maemo.faster\u应用程序\u管理器 类别=系统; 这不会显示

丹尼斯建议的那个给出了输出

dropn900 /usr/share/icons dropn900 dropn900 /usr/共享/图标 dropn900
但是我只需要“dropn900”,否则脚本将不起作用。

因为您使用的是等于而不是空格作为字段分隔符,
$1
实际上是带有前导空格的
图标。试一试

awk -F= '$1==" Icon" {print $2}'

在您的文件上,您将看到名称中包含数字的文件实际上是不相关的。

因为您使用的是等于而不是空格作为字段分隔符,
$1
实际上是带有前导空格的
“Icon”
。试一试

awk -F= '$1==" Icon" {print $2}'

在您的文件上,您将看到名称中包含数字的文件实际上是不相关的。

如果您的一些文件在每行上都有前导空格,而有些文件没有,此正则表达式匹配可能会有帮助:

awk -F= '$1 ~ " *Icon" {print $2}'

如果某些文件的每行都有前导空格,而有些文件没有,则此正则表达式匹配可能会有帮助:

awk -F= '$1 ~ " *Icon" {print $2}'


隐马尔可夫模型。。但现在我的其他工作不做了。比如“fapman.desktop”。它有相同的行“Icon=fapman”。@AlMehdi,如果一个值有前导空格,而另一个没有,那么您不能使用
==
将它们与同一字符串进行比较!不要把重点放在文件名上,在这个Q的非常错误的标题中突出显示,这是不相关的。使用重新匹配或其他方法来检查。ghostdog74解决方案有效,所以我正在使用它。而且是真的。。我要换个话题。嗯。。但现在我的其他工作不做了。比如“fapman.desktop”。它有相同的行“Icon=fapman”。@AlMehdi,如果一个值有前导空格,而另一个没有,那么您不能使用
==
将它们与同一字符串进行比较!不要把重点放在文件名上,在这个Q的非常错误的标题中突出显示,这是不相关的。使用重新匹配或其他方法来检查。ghostdog74解决方案有效,所以我正在使用它。而且是真的。。我要换个话题了。谢谢丹尼斯!是的,这就是为什么。dropn900.desktop具有前导空格。。我能用一个awk解决这个问题吗?还是我需要两个awk?@AlMedhi:见下面我的答案。(使用带有用户名的@,否则他们可能永远看不到回复。)@dennis williamson:谢谢!将来会这样做。不知道;)谢谢你,丹尼斯!是的,这就是为什么。dropn900.desktop具有前导空格。。我能用一个awk解决这个问题吗?还是我需要两个awk?@AlMedhi:见下面我的答案。(使用带有用户名的@,否则他们可能永远看不到回复。)@dennis williamson:谢谢!将来会这样做。不知道;)@丹尼斯·威廉姆森:它在《终点站》中确实有效,但当我在剧本中这样做的时候。它没有找到全部。之前它只是错过了“dropn900”,但现在它错过了包括“dropn900”在内的五个。可能是因为它发现了很多。。它获取所有带有“图标”的行。编辑我的帖子。@dennis williamson:它在终端中确实有效,但当我在脚本中这样做时。它没有找到全部。之前它只是错过了“dropn900”,但现在它错过了包括“dropn900”在内的五个。可能是因为它发现了很多。。它获取所有带有“图标”的行。编辑我的帖子。@ghostdog74:谢谢,但它在“fapman”上不起作用,因为它没有前导空间。对不起。。忘记了“*”。。现在它可能会起作用。但我不确定它是否总是第一个正确的“图标”。“^”表示。奇怪。。现在“fapman”在终端中给出正确的输出。但是当我在脚本中运行它时不显示。只有“法普曼”在13岁时没出现我的错。。我回去仔细检查了一下。它找到了“法普曼”,这是它应该找到的。我发现这个图标在另一个文件夹中。这是一个为我工作的。@ghostdog74:谢谢,但它对“fapman”不起作用,因为它没有前导空间。对不起。。忘记了“*”。。现在它可能会起作用。但我不确定它是否总是第一个正确的“图标”。“^”表示。奇怪。。现在“fapman”在终端中给出正确的输出。但是当我在脚本中运行它时不显示。只有“法普曼”在13岁时没出现我的错。。我回去仔细检查了一下。它找到了“法普曼”,这是它应该找到的。我发现这个图标在另一个文件夹中。这就是为我工作的那个。
awk -F= '$1~/^ *Icon/ {print $2}' file