在awk中使用cat和while读取行

时间:2014-07-14 17:51:08

标签: shell awk

我在使用cat和awk中的读取行时遇到语法错误。

示例代码:

awk '{
if( condition )
{
 array[FNR]=$1;
 cat file1.json | while read LINE; do 
 print LINE
 done;
}
fi
}' /home/user/spfile.txt

我的json文件:

{
   "Section_A": {
    "ws/abc-Location01": 24, 
    "ws/abc-Location02": 67,
    "ws/abc-Location03:  101,
   },
   "Section_B": {
    "ws/abc-Location01": 33, 
    "ws/abc-Location02": 59,
    "ws/abc-Location03:  92,
    "ws/abc-Location42:  92,
   }
}

我的数组:包含各种分区的位置,如下所示:

array[15742] is nsg -> /ws/abc-Location42/uname/builds_nsg
array[15744] is bfr -> /ws/abc-Location63/uname/builds_bfr
array[15746] is pre -> /ws/abc-Location67/uname/builds_pre
array[15748] is sfjk -> /ws/abc-Location67/uname/builds_sfjk

FILE2.TXT

abc5-blah30a:/vol/local13/abc-Location67
1000 598
abc5-blah30a:/vol/local14/abc-Location68
1000 186
abc5-blah30a:/vol/local14/abc-Location01
1000 256
abc5-blah30a:/vol/local14/abc-Location02
1000 15
abc5-blah30a:/vol/local14/abc-Location03
1000 765

我想做的事情:

  • 我只需要在json文件中更改B部分,并跳过所有其他部分。
  • 我需要检查B部分中分区的位置,并且对于与数组的所有匹配,右边的数值不应该改变。
  • 对于所有不匹配,需要将右侧的数值更改为另一个文件file2.txt中的相应值。

示例

  • 我的json文件中的Location42与数组匹配,因此我不会更改它。
  • 但是json文件中的Location01,02,03数组没有匹配。
  • 所以我需要针对file2.txt查找这3个位置的corresp值。
  • 我需要将它们改为256,15,765。

1 个答案:

答案 0 :(得分:0)

<强> RTFM

awk是一个功能强大的工具,可以做很多事情(即使chepner说python,perl或者ruby可以更适应你的问题),但它不是一个没有学习就可以使用的神奇工具。

您根本无法在awk脚本中使用任何shell构造。