使用awk列出包含空格的文件

使用awk列出包含空格的文件,awk,Awk,去年我在用awk做一些实验。我编写了以下内容来修改git输出: git状态-s | awk'{printf(“\t%s:%s%s\n”,FNR,$1,$2)}' 这个输出类似于 1: M "_notes/Digital 2: M _notes/Perl.md 3: M "_notes/Tech 4: M _notes/vim.md 它可以工作,但当文件中有空格时会阻塞,如上面示例中的第1行和第3行所示。请注意,

去年我在用awk做一些实验。我编写了以下内容来修改git输出:

git状态-s | awk'{printf(“\t%s:%s%s\n”,FNR,$1,$2)}'

这个输出类似于

        1: M "_notes/Digital
        2: M _notes/Perl.md
        3: M "_notes/Tech
        4: M _notes/vim.md
它可以工作,但当文件中有空格时会阻塞,如上面示例中的第1行和第3行所示。请注意,我在MacOS上,这两个文件被撇号包围:

'Digital Gardening.md'
'Tech Stuff.md'
如何修改此选项,使其正确输出带有空格的文件?

使用GNU awk 4:

git status-s | awk'{printf(“\t%s:%s%s\n”,FNR,$1,$2)}'FPAT=“([^]+)|”(“[^']+]”)
从其:

FPAT的值应该是提供正则表达式的字符串。此正则表达式描述每个字段的内容


在上面的示例中,我们需要字段是非空格的
[^]+
或由
'
引用的字符串:
('[^']+')

似乎您只是在为行编号,您只需简单地执行此操作即可

$ git status -s | nl -s:
或者,使用
awk

$ git status -s | awk '{print NR":",$0}'

git
命令具有
-z
选项,可以在每个文件后打印空字节而不是新行。您可以在
gnu awk
中使用
-z
RS='\0'

git status -sz | awk -v RS='\0' '{col1=$1; $1=""; printf "\t%s: %s%s\n", FNR, col1, $0}'

您必须向我们展示您的问题对awk的输入(即,
git status-s
的输出)以及您希望从awk获得的输出,以便我们为您提供帮助。到目前为止,您已经向我们展示了您获得的输出,但没有展示您想要的输出,也没有展示需要解析以生成该输出的输入。由于您的脚本中没有创建双引号(
”)的内容,因此大多数双引号都会出现在您的输入中,但您说输入使用单引号(
)。也不清楚为什么不使用
print NR,$0
,所以不清楚这里到底发生了什么。文件名可以包含单引号(
)因此,YMMV采用了这种方法。这两种方法都很有效。看起来我问了一个XY问题。这不是一个特别的XY问题,只是缺少了使其成为本论坛适当问题的关键部分,例如示例输入和预期输出。我一直希望我能指导您如何提出一个好问题(请参阅)所以下次你可以这样做,但你没有对如何到达那里做出回应。啊,好吧。。。。