2014-02-10 41 views
2

我试图找出什么是下面的命令在Linux中的意思是试图了解一个简单的Linux代码

awk 'match($0, "##SA") ==0 {print $0} ' $1 > ${G_DEST_DIR}/${G_DEST_FILENAME} 

它是否不再从给定的参数,并在dest_dir将其放置在1号线?

+0

不清楚为什么原作者写了一个高度unidiomatic awk脚本时简单地'的grep -v“^ ## SA''就好办多了两个阅读和写。 – tripleee

+0

'匹配(字符串,正则表达式[,数组])' 搜寻字符串最长,最左边的由正则表达式,正则表达式匹配到并返回字符位置或索引,在该该串开始(一个,如果它开始于字符串的开始)。如果找不到匹配,则返回零。 – BMW

回答

2

这AWK打印从输入文件中的所有行不匹配的模式:

##SA 

这个AWK的输出重定向到文件名表示为:

${G_DEST_DIR}/${G_DEST_FILENAME} 

$1是壳这里的变量实际上是awk的输入文件。

虽然同AWK缩短为:

awk '!/##SA/' "$1" > "${G_DEST_DIR}/${G_DEST_FILENAME}" 
+0

哦,所以如果模式匹配是匹配($ 0,“## SA”)== 0什么都不做或不打印,否则打印任何事物{打印$ 0}是这样吗?非常感谢 –

+0

是的,非常感谢你的帮助。欣赏它 –

+0

是的,这是正确的'{打印$ 0}'是默认操作,因此可以省略。 – anubhava