【发布时间】:2021-05-21 10:46:28
【问题描述】:
我有一个表模式 - 以逗号分隔的列名。为了清楚起见,我将它们放在每行一列中,如下所示
$ cat cols_name.txt
id
resp
x_amt
rate1
rate2
rate3
pay1
pay2
rate_r1
rate_r2
x_rate1
x_rate2
x_rate3
x_rate_r1
x_rate_r2
x_pay1
x_pay2
rev1
x_rev1
我需要找出与列对 ( pay1 -> x_pay1 ) 匹配的对,并将它们列在一起作为中间输出,如下所示
x_rate1 rate1
x_rate2 rate2
x_rate3 rate3
x_pay1 pay1
x_pay2 pay2
x_rate_r1 rate_r1
x_rate_r2 rate_r2
x_rev1 rev1
然后最后将频率打印为
pay 2
rate 3
rate_r 2
rev 1
在我尝试获取中间输出时,下面的 awk 命令不起作用。
awk ' NR==FNR { if( $1~/^x_/ ) a[$1]=1 ; next } $1~/"x_" a[$1]/ { print $0 } ' cols_name.txt cols_name.txt
它没有打印任何东西。可以帮忙解决一下吗
【问题讨论】:
-
您能否修改 cols_name.txt 的帖子,以展示当您 cat 时它的实际外观?
-
您真的需要打印该中间输出还是只是认为您需要这样做才能获得最终输出?
-
@EdMorton.. 是的.. 我也需要中间输出..
-
@EdMorton.. 中间输出将用于下游处理.. 其中 x_ 名称将重命名为其对.. 即删除非“x_”相应列.. 频率部分用于记录目的。
-
那么您是否希望将频率值输出到 stderr 或其他文件,这样它就不会与 stdout 中的对混在一起?