2
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 有什么用?
4

1 回答 1

4

-v OFS="\n"将一个从 shell 命名的参数传递OFS给 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是打印当前行,它将打印该行

于 2013-06-03T18:08:20.243 回答