使 awk 保持结束空白

Make awk keep ending whitespace

我有一个包含两列的文件列表。我需要删除第一列并保留文件名列表。如果我碰巧有一个以 space 结尾的文件,例如 "some file ",awk 会删除 space。

示例文件 "input"(注意 "some file " 末尾的 space)

abc some file 
def some other file

运行

cat input | awk '{=""; print substr([=11=], 2)}' > output

将产生文件输出

some file
some other file

其中 "some file " 现在是 "some file",导致处理文件列表时文件不存在。

感谢任何便携式解决方案:)

[编辑] 试图简化上面的示例以使其更清楚,但实际上有更多的列,因此某些解决方案可能不适用。

实际文件是 rsync --list-only 输出:

drwxr-xr-x        4096 2017/06/04 11:24:21 .
drwxr-xr-x      234234 2017/06/04 11:24:19 some file 
drwxr-xr-x     1341212 2017/06/04 11:24:19 some other file

显示文件大小的列可能会扩展,因此删除固定数量的尾随字符会导致错误。

文件名确实可以包含路径和多个space。

示例测试文件(请记住,文件大小可能会有所不同,因此第二列的大小可能会增加):

drwxr-xr-x        4096 2017/06/04 11:24:21 .
drwxr-xr-x        4096 2017/06/04 11:24:19 another
drwxr-xr-x        4096 2017/06/04 11:24:19 another/one
drwxr-xr-x        4096 2017/06/04 11:24:19 another/one/bites
drwxr-xr-x        4096 2017/06/04 11:24:19 another/one/bites/ de_dust
-rw-r--r--           0 2017/06/04 11:24:19 another/one/bites/ de_dust/ 2017/06/04 11:24:19 Iron Rhapsody
drwxr-xr-x        4096 2017/06/04 11:24:19 phantom of 
drwxr-xr-x        4096 2017/06/04 11:24:19 phantom of /the opera
-rw-r--r--           0 2017/06/04 11:24:19 phantom of /the opera/Bohemian Maiden

[/编辑]

我建议使用 GNU sed:

sed -r 's/^.* [0-9/]{10} [0-9:]{8} //' input

输出:

.
some file 
some other file

trcut 的解决方案:

 tr -s ' ' <inputfile | cut -d' ' -f5-
$ awk '{sub(/[^/]+\/.{15}/,"")}1' file
.
another
another/one
another/one/bites
another/one/bites/ de_dust
another/one/bites/ de_dust/ 2017/06/04 11:24:19 Iron Rhapsody
phantom of
phantom of /the opera
phantom of /the opera/Bohemian Maiden

或使用 GNU 或 OSX sed for -E(使用严格的 POSIX seds,您将转义 +、{ 和 }):

$ sed -E 's:[^/]+/.{15}::' file
.
another
another/one
another/one/bites
another/one/bites/ de_dust
another/one/bites/ de_dust/ 2017/06/04 11:24:19 Iron Rhapsody
phantom of
phantom of /the opera
phantom of /the opera/Bohemian Maiden