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"
将一个从 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
是打印当前行,它将打印该行