为什么Solaris 5.10上的GNU GAWK 3.1.5与模式不匹配?

问题描述 投票:0回答:1

我通过awk解析SFTP'ls -l'输出,只打印现有目录的结果(是的,我知道Python更好,解析ls不是好主意,技术限制任务)。这是我收到的输出:

bash-3.2$ sftp my-server < batch_ls.sftp | gawk 'BEGIN{d=-1;wd=1}/^sftp> c/{d++;wd=0}/Coul/{wd=1}wd==0{print $0,d,wd}'

Connecting to my-server...
sftp> cd /ik/sftp_source/alpha 0 0
sftp> ls -l 0 0
drwxr-xr-x    2 65740    102          4096 Mar 21 05:15 . 0 0
drwxr-xr-x    4 65740    102          4096 Mar 21 04:21 .. 0 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 0452984832A8.234 0 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 0989855744A8.234 0 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 1258291200A8.234 0 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 1862270976A8.234 0 0
sftp> cd /ik/sftp_source/belta 1 0
Couldn't canonicalise: No such file or directory
sftp> ls -l 1 0
drwxr-xr-x    2 65740    102          4096 Mar 21 05:15 . 1 0
drwxr-xr-x    4 65740    102          4096 Mar 21 04:21 .. 1 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 0452984832A8.234 1 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 0989855744A8.234 1 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 1258291200A8.234 1 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 1862270976A8.234 1 0
sftp> cd /ik/sftp_source/delta 2 0
sftp> ls -l 2 0
drwxr-xr-x    2 65740    102          4096 Mar 21 05:15 . 2 0
drwxr-xr-x    4 65740    102          4096 Mar 21 04:21 .. 2 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 0335544320A8.234 2 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 0419430400A8.234 2 0
-rw-r--r--    1 65740    102            35 Mar 21 05:15 1073741824A8.234 2 0
-rw-r--r--    1 65740    102            34 Mar 21 05:15 1392508928A8.234 2 0

这里:

  • d是目录计数器
  • wd是一个标志,要知道我们是否正在处理正确目录的输出,或者我们没有'cd'所需的那个,我们仍然在前一个。

它看起来好像没有捕获字符串的“不能”部分。任何人都可以帮我提出更好的解决方案并解释为什么会发生这种情况?非常感谢!

PS注意,“无法规范化......”行末尾没有d和wd值。

bash awk sftp solaris
1个回答
4
投票

管道之后的命令部分无法看到这些行,因为您正在重定向stdoutsftp正在将错误发送到stderr

如果要将它们重定向到gawk,则应将2>&1添加到命令中:

bash-3.2$ sftp my-server < batch_ls.sftp 2>&1 | gawk 'BEGIN{d=-1;wd=1}/^sftp> c/{d++;wd=0}/Coul/{wd=1}wd==0{print $0,d,wd}'
© www.soinside.com 2019 - 2024. All rights reserved.