如何更改文件的记录分隔符?例如,通过将记录分隔符从换行符更改为空格,将多行连接成一行。另一个示例是通过将记录分隔符从空格更改为换行符,将一行在其空格处拆分为多行。什么环境变量控制记录分隔符?国税局和ORS?
同样,如何更改文件的字段分隔符?环境变量 IFS OFS 可以使用吗cat
?
答案1
记录和字段分隔符行为可以在肯定诸如awk
、 和 之类的程序很少是通过环境变量完成的。诸如 之cat
类的常见实用程序不具有此类功能:只有记录在案的程序(例如cut
)才有使用不同记录或字段分隔符的选项。
awk
是所提到的最灵活的,可以为记录分隔符和字段分隔符设置变量:
FS
输入字段分隔符正则表达式; A<space>
默认情况下。
OFS
print语句输出字段分隔符;<space>
默认情况下。
ORS
print语句输出记录分隔符; A<newline>
默认情况下。
RS
的字符串值的第一个字符RS
应为输入记录分隔符; A<newline>
默认情况下。如果RS
包含多个字符,则结果未指定。如果RS
为空,则记录由由以下组成的序列分隔<newline>
加一个或多个空行、前导或尾随空行不得导致输入的开头或结尾出现空记录,并且<newline>
无论 的值FS
是什么,都应始终是字段分隔符。
您可以在脚本中设置这些变量,例如,
awk ' BEGIN { RS=" "; } { print; }' < inputfile
在新行上打印文件的每个单词。您还可以使用以下-v
选项分配给任何变量:
awk -v RS=" " '{ print; }' < inputfile
最后,awk
还有一个-F
与变量相同的选项(输入字段分隔符)FS
。
进一步阅读:
答案2
如果您只关心替换字符,您可以查看该tr
实用程序(代表“翻译”)。例如,要将换行符转换为空格,您可以使用:
tr '\n' ' ' < your_input_file
同样,要将空格转换为换行符,请使用:
tr ' ' '\n' < your_input_file
请注意,tr
读取自stdin
,因此您要么需要<
像我在这些示例中所做的那样使用输入重定向 ( ) ,要么将您的输入通过管道传输到其中(使用|
)。