![cygwin awk 输出到 Windows 行分隔符](https://linux22.com/image/41386/cygwin%20awk%20%E8%BE%93%E5%87%BA%E5%88%B0%20Windows%20%E8%A1%8C%E5%88%86%E9%9A%94%E7%AC%A6.png)
我可以找到打印 zip 条目列表并转发到 txt 文件的方法。
unzip -l my.zip | awk '{print $4}' > my.txt
当我在 Windows 记事本中打开文件时,my.txt
行分隔符被忽略,所有行都呈现在一行中。
如何使这些管道线具有适当的行分隔符?
答案1
每个处理行的输出awk
都以换行符 ( ) 终止,\n
这是 Unix/Linux 标准。 Windows/DOS 需要回车符后跟换行符来标记行结束 ( \r\n
)。 notepad
将显示您当前看到的所有 Linux 生成的文件。
awk
要解决此问题,请通过命令传递 的输出unix2dos
,该命令会为您将n
s 转换为s:\r\n
unzip -l my.zip | awk '{print $4}' |unix2dos > my.txt
或者,尝试使用变量告诉在每行末尾awk
输出:\r\n
ORS
unzip -l my.zip | awk -v ORS='\r\n' '{print $4}' > my.txt
要列出没有页眉和页脚的列表:
unzip -l my.zip | awk -v ORS='\r\n' '{print $4}' | tail -n +4 | head -n -2 > my.txt
或者
或者,使用zipinfo -1 <zip file>
(数字 1,而不是字母 l)列出没有页眉和页脚的文件。您可能仍然需要通过管道将其通过unix2dos
。仅当zipinfo
在 CygWin 中可用时才有用。
答案2
我设法将输出文件的行分隔符转换为 dos 样式unix2dos
。
$ unix2dos my.txt
unix2dos: converting file cdc_1.1.jar.txt to DOS format...