从Windows下的命令shell运行awk
命令,并提供此输出
a a a
b b b
c c c
当我在批处理文件中保存该命令并运行它时,我得到了
a a a b b b c c c
<小时/> 已经从GnuWin32安装了
awk
,我使用的是GNU Awk 3.1.6版本。
有问题的awk
命令是awk "ORS=NR%3?FS:RS" input_file
a
a
a
b
b
b
c
c
c
<小时/> 如何恢复我的行结尾?
经过一些实验后的结果:
awk "1" input_file
给出CR + LF行结尾,在文件末尾添加一个额外的行(input_file缺少)
awk -v ORS=. "1" input_file
将此作为输出:a.a.a.b.b.b.c.c.c.
(无行结束)
Ed Morton的第一批提案 - 见下文 - (使用\r
和\n
而不使用单引号'
)都会产生相同的输出,无论RS
和ORS
的设置如何:所有输出都以CR + LF行结尾给出
添加-v BINMODE=3
后,我得到了不同的结果:
所有输出仍然以CR + LF行结尾给出,但对于某些命令,双行结尾打印出0x0D 0x0A 0x0D 0x0A
。下表列出了每个输入行产生两个行结尾的哪些组合,空白产生单行结尾:
ORS : \n | \r | \r\n
-----------+----+----+-------
\n | | XX | XX
RS: \r | XX | | XX
\r\n | | |
btw,我之所以删除RS
和ORS
值中的单引号,是因为所有输出都在最后添加了一个或两个单引号 - 并且仅在结尾处:单个ORS='\r'
时,其中两个以其他值之间的行结尾。使用双引号会产生与不使用引号相同的结果。
答案 0 :(得分:3)
如果GnuWin32包含paste
,则更简单的选择是:paste - - - < filename
答案 1 :(得分:0)
将您的三元表达式括号括起来:
awk "ORS=NR%3?FS:RS"
是不明确的,会在某些awks上产生语法错误,因此将其更改为:
awk "ORS=(NR%3?FS:RS)"
但这可能无法解决您的问题。
现在尝试awk -v RS='\n' -v ORS='\r\n' ...
并将您的脚本更改为1
,以查看是否再现了行结尾。 GOT与行结尾有关,因此RS和ORS的\r
和\n
的某种组合必须这样做。
另外,请尝试设置-v BINMODE=3
- 不确定它是否会影响您的环境,但不要确定是否需要gkk来查看\r
。
所以,试试这些,看看哪个再现了行结尾:
awk -v RS='\n' -v ORS='\n' "1" input_file
awk -v RS='\r' -v ORS='\n' "1" input_file
awk -v RS='\r\n' -v ORS='\n' "1" input_file
awk -v RS='\n' -v ORS='\r' "1" input_file
awk -v RS='\r' -v ORS='\r' "1" input_file
awk -v RS='\r\n' -v ORS='\r' "1" input_file
awk -v RS='\n' -v ORS='\r\n' "1" input_file
awk -v RS='\r' -v ORS='\r\n' "1" input_file
awk -v RS='\r\n' -v ORS='\r\n' "1" input_file
如果他们都没有,那么尝试向每个人添加-v BINMODE=3
,例如:
awk -v BINMODE=3 -v RS='\n' -v ORS='\n' "1" input_file
awk -v BINMODE=3 -v RS='\r' -v ORS='\n' "1" input_file
awk -v BINMODE=3 -v RS='\r\n' -v ORS='\n' "1" input_file
awk -v BINMODE=3 -v RS='\n' -v ORS='\r' "1" input_file
awk -v BINMODE=3 -v RS='\r' -v ORS='\r' "1" input_file
awk -v BINMODE=3 -v RS='\r\n' -v ORS='\r' "1" input_file
awk -v BINMODE=3 -v RS='\n' -v ORS='\r\n' "1" input_file
awk -v BINMODE=3 -v RS='\r' -v ORS='\r\n' "1" input_file
awk -v BINMODE=3 -v RS='\r\n' -v ORS='\r\n' "1" input_file
然后更新任何一个用"1"
取代"ORS=(NR%3?FS:RS)"
。