【问题标题】:awk | Not able to merge 2 files哇 |无法合并 2 个文件
【发布时间】:2013-12-09 16:39:08
【问题描述】:

我是 awk 的新手,正在尝试编写可以合并 2 个文件的代码..

文件1

session=123;1,code=01,name=om  
session=345;3,code=04,name=ra

文件2

time=44,minute=22,sec=01,session=123;1,creation=89
time=34,minute=12,sec=023,session=523;1,creation=80

输出应该是

time=44,minute=22,sec=01,session=123;1,creation=89,code=01,name=om
time=34,minute=12,sec=023,session=523;1,creation=80,,

我写过类似的东西:

BEGIN { FS = OFS = "," }
FNR == NR {
  a[$2] = substr($0,index($0,$2));
  next
}
{
  if($4 in a)print $0","a[$2];
  else print $0",,";
}

但这不会产生正确的输出。

你能帮我在哪里弄错了吗?

【问题讨论】:

  • 为什么file1 的其余部分没有包含在预期输出中? file1 的同一行上真的应该有多个 session 值吗?
  • 因为 file2 是基本文件.. 如果 file1 中有额外内容,则可以忽略.. 但我需要 file2 中的所有内容。
  • 我的问题是由于您编辑之前file1 的格式不正确。
  • 啊哈.. 是的,我也编辑过..谢谢

标签: awk gawk


【解决方案1】:

index($0, $2) 不是在字段 2 之后获取所有内容的好方法。在file1 的第一行中,$2"1",所以index($0, "1")section=123 中找到1

试试这个:

BEGIN { FS = OFS = "," }
FNR == NR {
  session=$1;
  $1 = "";
  a[session] = $0;
  next
}
{
  if($4 in a)print $0","a[$4];
  else print $0",,";
}

【讨论】:

  • 谢谢.. 但是为什么 substr($0,index($0,$2)) 不起作用.. 在这个例子中我只有 3 和 4 个字段.. 可以有 n 个字段..那么 substr 更好..对吗?或者请提出您的看法
  • 我仍然没有得到合并输出.. # awk -f field_merge_2_1.awk file1.log file2.log time=44,minute=22,sec=01,session=123;1,creation= 89,, time=34,minute=12,sec=023,session=523;1,creation=80,,
  • $221时,index($0, $2)是行中第一个1的位置,而不是字段3的位置。
  • 您在file1 中引用了错误的字段,您应该用作数组索引的字段是$1。我已经更新了将字段 1 之后的所有内容存储到数组中的答案。
  • 我不知道,但我收到语法错误。这个版本是否与 awk 有问题?awk -f field_merge_2_1.awk file1.log file2.log awk: field_merge_2_1.awk:4: $1 = '' ; awk: field_merge_2_1.awk:4: ^ invalid char ''' in expression
猜你喜欢
  • 2012-11-12
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
  • 2019-02-06
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多