首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >bash中的连字符和竖线

bash中的连字符和竖线
EN

Stack Overflow用户
提问于 2019-05-27 02:16:14
回答 1查看 377关注 0票数 2

我正在尝试破译以下代码:

代码语言:javascript
复制
awk '{print "aws s3 cp ###"$4" - | gunzip | awk -F $\"\\t\" '"'"'BEGIN {OFS = FS} {if ($287 == \"0\" && tolower($295)) print $11}'"'"' > "gensub(/.+\/(.+tsv\.gz)/,output_path"\\1.txt",$4)}'

然而,有几件事我并不确定:

1) "-“做什么。我知道"|“用于管道,但我真的不确定"-”,除非在否定一些选项的上下文中。我试着用谷歌搜索"ubuntu hyphen/minus/dash“,但没有找到与此相关的内容

2)我对print "aws s3 cp ###"$4"也不是很确定。它通常打印满足if条件的行,但这里它接受一个aws命令字符串,后跟$4,我知道这是一个列索引

3)此外,我知道awk -F后跟一个符号会将符号指定为分隔符,但这里没有符号。我不理解这种情况下的默认行为。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 03:15:00

这是一个非常糟糕的命令行。

1)连字符是aws s3 cp命令的一个选项。以这种方式使用它是不寻常的,但这意味着副本的目标是STDOUT,因此会被输送到gunzip中。更常见的情况是,连字符表示通过管道传输到命令中的数据的STDIN。

2) print正在输出aws s3 cp命令以及管道的所有其余部分(包括另一个AWK命令的嵌入式实例)。

3)这里-F的“符号”是使用(不正确地)Bash的翻译引号($" ")的制表符。它应该使用Bash的ANSI引号($' '),它允许解释反斜杠转义(\t表示制表符)。在任何情况下,它都是浪费的,因为AWK可以理解-F\t,而不需要任何特殊的引用。

这似乎是一个必须在其他地方设置的变量:output_path

外部AWK命令输出的管道需要馈送到shell才能执行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56316203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档