linux打印匹配的行到文件,linux – 打印与count生成的文件中的条件匹配的行数

我正在试图弄清楚如何使用纯粹的awk打印满足bash中while计数循环提供的计数的行.这是输入的一些行.

NODE_1_posplwpl

NODE_1_owkokwo

NODE_1_kslkow

NODE_2_fbjfh

NODE_2_lsmlsm

NODE_3_Loskos

NODE_3_pospls

我想要做的是打印在第二个字段中匹配while计数循环提供的计数的行到名为file_ $count_test的文件中.

因此,名为“file_1_test”的文件将包含带有“NODE_1 ..”的行,“file_2_test”将包含带有“NODE_2 ..”的行;就像文件的所有行一样.

这是我的代码.

#! /bin/bash

while read CNAME

do

let count=$count+1

grep "^${CNAME}_" > file_${count}_test

awk -v X=$count '{ FS="_" } { if ($2 == X) print $0 }' > file_${count}_test

done

exit 1

此代码仅创建file_1_test,该文件为空.所以awk条件似乎工作不好.

解决方法:

看起来您正在尝试将输入拆分为基于下划线之间的数字命名的单独文件.那只是:

awk -F'_' '{print > ("file_" $2 "_test")}' file

您可能需要将其更改为:

awk -F'_' '$2!=prev{close(out); out="file_" $2 "_test"} {print > out; prev=$2}' file

如果您生成大量输出文件而不使用GNU awk,则可能导致“打开文件太多”错误.

你的评论如下,看:

$cat file

NODE_1_posplwpl

NODE_1_owkokwo

NODE_1_kslkow

NODE_2_fbjfh

NODE_2_lsmlsm

NODE_3_Loskos

NODE_3_pospls

$awk -F'_' '{print $0 " > " ("file_" $2 "_test")}' file

NODE_1_posplwpl > file_1_test

NODE_1_owkokwo > file_1_test

NODE_1_kslkow > file_1_test

NODE_2_fbjfh > file_2_test

NODE_2_lsmlsm > file_2_test

NODE_3_Loskos > file_3_test

NODE_3_pospls > file_3_test

只需将$0“>”更改为>就像在第一个脚本中将输出转到单独的文件而不是仅仅向您显示最后一个脚本会发生的那样.

标签:bash,while-loop,linux,awk

来源: https://codeday.me/bug/20190828/1748170.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值