【问题标题】:Using one awk output into another awk command将一个 awk 输出用于另一个 awk 命令
【发布时间】:2016-10-14 13:46:00
【问题描述】:

我有一个文件(excel 文件),其中包含一些列(不固定,动态更改),我需要获取几个特定列的值。我可以使用一个 awk 命令获取列,然后使用这些列号将行打印到另一个 awk 命令中。有什么办法可以合二为一吗?

awk -F',' ' {for(i=1;i < 9;i++) {if($i ~ /CLIENT_ID/) {print i}}} {for(s=1;s < 2;s++) {if($s ~ /SEC_DESC/) {print s}}} ' <file.csv> | awk -F "," '!($5~/...[0-9]L/ && $21~/FUT /) {print $0}' <file.csv>

将列 (client_idandsec_desc`) 输出为 5 和 9,这是它们的列号(这会随着不同的文件而变化)。

现在使用此列号,我得到所需的输出如下:

awk -F "," '!($5~/...[0-9]L/ && $21~/FUT /) {print $0}' <file.csv>

如何将这些组合成一个命令?将变量从第一个传递到第二个?

输入(csv文件有各种动态列,对以下两列感兴趣)

CLIENT_ID   SEC_DESC
USZ256      FUT DEC 16 U.S.
USZ256L     FUT DEC 16 U.S. BONDS
WNZ256      FUT DEC 16 CBX
WNZ256L     FUT DEC 16 CBX BONDS

输出给我行- 2 和 4 与我在第二个 awk 命令中的正则表达式模式匹配(列号为 5 和 21)。这些列号根据文件更改,因此首先必须使用第一个 awl 获取列号,然后将其作为输入提供给第二个 awk。

【问题讨论】:

  • 您能发布示例输入和所需的输出吗?
  • CLIENT_ID | SEC_DESC US456 | FUT 12 月 16 日美国 US546L | FUT 12 月 16 日美国债券 WN546 | FUT 12 月 16 日 CBX WN546L | FUT DEC 16 CBX T-BONDS 这是 csv 文件的一部分
  • 请编辑您的问题以包含输入和输出
  • 编辑了输入/输出等问题

标签: bash shell csv awk


【解决方案1】:

我想我明白了。

awk -F',' '
    NR == 1 {
        for (i=1; i<=NF; ++i) {
            if ($i == "CLIENT_ID") cl_col = i
            if ($i == "SEC_DESC") sec_col = i
        }
    }
    NR > 1 && !($cl_col ~ /...[0-9]L/ && $sec_col ~ /FUT /) {print $0}
' RED_FUT_TST.csv

【讨论】:

    【解决方案2】:

    为了解决您的问题,您可以在处理第一行时进行测试,并在其中放置用于发现列号的逻辑。然后在处理数据行时,使用第一步中的列号。

    NR 是一个 awk 内置变量,包含正在处理的记录号。NF 是列数。)

    例如:

    $ cat red.awk
    NR == 1 {
      for (i=1; i<=NF; ++i) {
        if ($i == "CLIENT_ID") cl_col = i;
        if ($i == "SEC_DESC") sec_col = i;
      }
    }
    
    NR > 1 && $cl_col ~ /...[0-9]L/ && $sec_col ~ /FUT /
    
    
    $ awk -F'\t' -f red.awk RED_FUT_TST.csv
    USZ256L FUT DEC 16 U.S. BONDS
    WNZ256L FUT DEC 16 CBX BONDS
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2019-05-12
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多