为什么OFS和FS在awk中有所不同?

时间:2011-09-21 12:33:39

标签: awk

在awk中,至少在gawk中,字段分隔符FS是空格(制表符或空格),这是合理的。但是输出字段分隔符OFS默认设置为空格。我希望它是tab,因为tab更像是UNIX文本文件中列的分隔符而不是空格(根据我的经验)。使它成为一个空间背后的理由是什么?

4 个答案:

答案 0 :(得分:2)

使用TAB的文本在不同的文本编辑器中可能看起来不同。因为他们中的许多人都有“如何解释TAB”的选项,例如: 4个空格,8个空格等。但是带空格的文本到处都是相同的。

另外一些缩进敏感的编程语言建议使用空格而不是制表符,例如here。从你的角度来看,这个建议也可能不合理。

如果您希望将空格设为OFS默认值,则可以创建一个别名,例如myawk=awk -v OFS='\t'

答案 1 :(得分:1)

awk编程语言可能比你现在的任何事实上的Unix标准更直观。

话虽如此,默认情况非常合理,原因与人们反对在源文件中使用制表符进行缩进时经常看到的原因大致相同。

答案 2 :(得分:0)

在@Kent脚本的基础上,这里是我在输入(F-parmeter)和输出(OFS参数)中处理csv和tsv的别名:

# alias to use awk on csv-files
alias awkt='awk -F"\t" -v OFS="\t"'
# alias to use awk on tsv-files
alias awkc='awk -F"," -v OFS=","'

答案 3 :(得分:0)

实际上,FS的默认值是“”,因此OFS具有相同的值是有意义的。 awk的实现是这样的,当FS为“”时,awk会跳过任何前导或尾随空格,并将所有连续空格视为分隔字段,但FS和OFS的默认是相同的,“ ”