awk重新排序输出文件中的行

时间:2016-09-24 17:31:27

标签: awk

在下面awk我在input打印出特定标签。但是,我似乎无法将当前输出中的第2行作为第1行。看起来因为input的格式化方式,这就是为什么output按照它的方式排序的原因。我似乎无法在awk中更改它。谢谢你:)。

输入

"barcodedSamples": {"MEV37": {"barcodeSampleInfo": {"IonXpress_007": {"controlSequenceType": "", "expName": "R_2016_09_20_12_47_36_user_S5-00580-7-Medexome",

AWK

awk -F"[]\":{}, ]*" '
    {for (i=1; i<NF; i++)   {if ($i =="expName") print $(i+1)
                             if ($i =="barcodeSampleInfo") print $(i+1) " " $(i-1)
                            }
    }
' input

当前输出

IonXpress_007 MEV37
R_2016_09_20_12_47_36_user_S5-00580-7-Medexome

所需的输出

R_2016_09_20_12_47_36_user_S5-00580-7-Medexome
IonXpress_007 MEV37

3 个答案:

答案 0 :(得分:1)

您可以在BEGIN函数中创建一个或多个数组。当处理线不打印时。而不是打印按照您想要的顺序附加到这些数组。在END函数中打印出这些数组。

答案 1 :(得分:1)

使用

输入文件

{
   "barcodedSamples" : {
      "MEV37" : {
         "barcodeSampleInfo" : {
            "IonXpress_007" : {
               "controlSequenceType" : "",
               "expName" : "R_2016_09_20_12_47_36_user_S5-00580-7-Medexome"
            }
         }
      }
   }
}

COMMAND

% jq '.barcodedSamples.MEV37.barcodeSampleInfo.IonXpress_007.expName' file.json

输出

"R_2016_09_20_12_47_36_user_S5-00580-7-Medexome"

% node                                                                                                         
> j = { "barcodedSamples": {"MEV37": {"barcodeSampleInfo": {"IonXpress_007": {"controlSequenceType": "", "expName": "R_2016_09_20_12_47_36_user_S5-00580-7-Medexome"}}}}}
{ barcodedSamples: { MEV37: { barcodeSampleInfo: [Object] } } }
> console.log(j.barcodedSamples.MEV37.barcodeSampleInfo.IonXpress_007.expName)
R_2016_09_20_12_47_36_user_S5-00580-7-Medexome

注意

现在您已了解如何访问任何部件,只需稍微修改一下即可完全满足您的需求

答案 2 :(得分:1)

awk -F\" '{print $(NF - 1)"\n" $8,$4}'  file

R_2016_09_20_12_47_36_user_S5-00580-7-Medexome
IonXpress_007 MEV37