【问题标题】:Awk not assigning value of field to variableawk没有将字段的值分配给变量
【发布时间】:2014-07-08 03:55:59
【问题描述】:

Awk 没有将我的文本文件中的字段值分配给变量。这是我尝试过的:

awk 'BEGIN {FS = ","};
{ a=$6;
print $a;
}' /location/canzee/textfile.txt

它打印所有行中的所有字段,而不是仅打印所有行中的第 6 个字段。然而,如果我这样做,它会在每一行中打印第 6 个字段:

awk 'BEGIN {FS = ","};
{ print $6;
}' /location/canzee/textfile.txt

有人可以帮忙吗?

【问题讨论】:

  • 顺便说一句,您也可以安全地从脚本中删除所有逗号。
  • @MarkSetchell s/commas/semi-colons/g

标签: awk


【解决方案1】:

$a 并不代表您认为的意思。您只想使用print a,而不是print $a。例如,如果a 包含值3,则print $a 将打印字段3。在您的情况下,a 可能包含非数字,在这种情况下a 的数值为零,所以它打印$0,意思是整行。

【讨论】:

  • @Canzee:要连接字符串,不要使用++ 仅用于数字加法。如果要连接字符串,只需将两个字符串放在一起即可。例如aint = a"%y%m%d".
  • 我不想连接..我想将第 6 个字段中的时间戳转换为 int.. 例如,我在第 6 个字段中有 Thu Jul 3 09:39:09 PDT 2014 ..我希望它被转换成这样的整数 20140703093909
  • @Canzee:那时你不需要做任何特别的事情。每当您像使用整数一样使用字符串时,它们都会自动转换为整数。如果要确保将字符串转换为整数,可以向其添加零:aint = a+0
  • @Canzee:在 awk 中,您使用 > 进行大于比较:if (a>yestint) print a
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
相关资源
最近更新 更多