Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 控件与x2B之间的区别是什么;M字符和a'\r';性格我们怎么写呢?_Algorithm_Unix_Awk_Ksh_Gawk - Fatal编程技术网

Algorithm 控件与x2B之间的区别是什么;M字符和a'\r';性格我们怎么写呢?

Algorithm 控件与x2B之间的区别是什么;M字符和a'\r';性格我们怎么写呢?,algorithm,unix,awk,ksh,gawk,Algorithm,Unix,Awk,Ksh,Gawk,'control+M'字符和'\r'字符之间的区别是什么 两者不一样。我们如何像写“\r”一样在gawk中写control+M字符 我的目标是告诉gawk,将'comtrol+M'字符作为RS(记录分隔符) 对于“\r”,我们可以写为 gawk -v RS='\r' 'code goes here' file gawk -v RS='\r' -v ORS='\n' '{gsub(/\n/,"",$0)} {print $0}' rawfile > newfile_slashr_remov

'control+M'
字符和
'\r'
字符之间的区别是什么

两者不一样。我们如何像写“\r”一样在gawk中写control+M字符

我的目标是告诉gawk,将'comtrol+M'字符作为RS(记录分隔符)

对于“\r”,我们可以写为

gawk -v RS='\r' 'code goes here' file

gawk -v RS='\r' -v ORS='\n' '{gsub(/\n/,"",$0)} {print $0}' rawfile > newfile_slashr_removed
这里不是
'\r'
,而是
'comtrol+M'

背景:

$ grep '\r' raw_file | wc
   1468   44570 2641642

$ grep '^M' raw_file | wc
   1463   44522 2638958
在我使用上述代码并获取输出并将其放入文件后

$ grep  '^M' WDY_worker_incr_newfile | wc
      0       0       0
$ grep '\r' WDY_worker_incr_newfile | wc
   1464   44570 2640175

这是怎么回事?

如果不写
^M
,请先按Ctrl-V键,然后按Ctrl-M组合键。初始Ctrl-V使shell命令行编辑“escape”成为下一个键 — 通常,Ctrl-M将被映射到与shell中的Return相同的操作,但是使用它,您可以在命令行中键入文本回车

这样,您就可以通过键入
RS='
+Ctrl-V+Ctrl-M+
'
等来编写
RS='^M'
grep'^M'

在现代shell(mksh、AT&T ksh93、gnubash等)上,您还可以编写
RS=$'\r'
grep$'\r'
,相反,美元撇号引号插入了C风格的转义序列

大多数工具不允许您只编写
'\r'
;printf和tr是例外情况,可能有也可能没有其他例外情况,这取决于所使用的操作系统和工具(例如,GNU sed允许它们出现在比BSD sed更多的地方)


您将其标记为
unix
,但另一个注意事项是,在基于DOS的环境(如Cygwin32)中,
^M^J
是行分隔符,而不仅仅是在正确的unix上,因此如果您想重复使用回车符,工具可能会出现错误。

您不需要编写
^M
,按Ctrl-V键,然后按Ctrl-M组合键。初始Ctrl-V使shell命令行编辑“escape”成为下一个键 — 通常,Ctrl-M将被映射到与shell中的Return相同的操作,但是使用它,您可以在命令行中键入文本回车

这样,您就可以通过键入
RS='
+Ctrl-V+Ctrl-M+
'
等来编写
RS='^M'
grep'^M'

在现代shell(mksh、AT&T ksh93、gnubash等)上,您还可以编写
RS=$'\r'
grep$'\r'
,相反,美元撇号引号插入了C风格的转义序列

大多数工具不允许您只编写
'\r'
;printf和tr是例外情况,可能有也可能没有其他例外情况,这取决于所使用的操作系统和工具(例如,GNU sed允许它们出现在比BSD sed更多的地方)


您将其标记为
unix
,但是,正如另一个注意事项,在基于DOS的环境(如Cygwin32)中,
^M^J
是行分隔符,而不仅仅是在正确的unix上,
^J
,因此,如果您想重复使用回车符,工具可能会出现错误。

printf“^M”\od
打印的内容与
printf\r>相同| od
。可能使用
grep-c
而不是
grep…|wc
为什么您认为control-M和
\r
不同?Henry,我已经在同一个文件上向您展示了grep命令的结果。结果是不同的。你确定
grep'^M'
没有以
M
开头的行吗?
\r
的十进制值是13(
man ascii
),恰巧
M
是第13个字母。
printf“^M”od
打印的字符与
printf”\r“\od
打印的字符相同。可能使用
grep-c
而不是
grep…|wc
为什么您认为control-M和
\r
不同?Henry,我已经在同一个文件上向您展示了grep命令的结果。结果不同。您确定
grep'^M'
没有以
M
开头的行吗?
\r
的十进制值是13(
man ascii
),恰巧
M
是第13个字母。