打印正常ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
虽然这不是ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
显然这不是我的用例,只是为了重现问题。
因此,虽然$ 0代表完整的行,但是当打印$ 1时不打印$ 0是奇怪的。
参考操作系统 - Ubuntu 14.04
答案 0 :(得分:5)
使用时:
ls | xargs -I var sh -c 'echo var | awk "{print $0}"'
双引号中有$0
因此$0
会被shell扩展,在这种情况下,它的值为sh
,不带引号。 awk
将其视为变量并打印为空白。
要使其工作,请转义$
:
ls | xargs -I var sh -c 'echo var | awk "{print \$0}"'
为什么$1
有效:
ls | xargs -I var sh -c 'echo var | awk "{print $1}"'
$1
也被shell扩展,它是空的。因此awk
只执行一个空的print
,它相当于print $0
,并且您在输出中获得了文件名。
然而,在双引号中使用awk命令并解析ls
输出容易出错并不是一个好主意。
答案 1 :(得分:0)
对于其他登陆此处的用户:如果语法完美,但是您可能正在使用Windows文件,请记住\r
将有效地覆盖您的文本,并使$0
看起来空白。...< / p>
首先运行dos2unix <file>
,然后尝试运行awk
。
注意:仅用\r
或sed
删除tr