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 有什么用?
最佳答案
-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
的默认操作是打印当前行,因此它将打印该行
关于shell - awk 语法 — 什么是 OFS?为什么末尾有 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16903005/