awk语法 - 什么是OFS以及为什么最后的1?

时间:2013-06-03 18:05:14

标签: shell awk

awk -F"\t" -v OFS="\t" '{if($18~/^ *[0-9]*(\.[0-9]+)?" *$/)sub(/"/,"",$18);else $18=" "}1' sample.txt

上面的代码是我正在修改的脚本中使用的一些awk代码。我是Unix的新手,所以我无法理解上面awk的语法。

  • -F用于将列与分隔符分开。
  • 什么是OFS
  • awk脚本末尾有什么用途?

1 个答案:

答案 0 :(得分:4)

-v OFS="\n"将名为OFS的参数从shell传递给awk脚本。与-F选项或FS类似,它是字段分隔符 - 但是对于输出。它被称为输出字段分隔符

你可以测试一下:

awk -v OFS=' ' '{print 1,2}' a.txt

以空格分隔的输出:

1 2
1 2

awk -v OFS=';' '{print 1,2}' a.txt

输出由;分隔:

1;2
1;2

在您的情况下,这意味着输出将由制表符(作为输入)

分隔

awk脚本末尾的1,除了脚本生成的输出外,让awk打印原始输入行。这是因为awk脚本通常包含测试(正则表达式等)和针对它们的操作。测试1将始终为真。由于awk的默认操作是打印当前行,它将打印行