gpt4 book ai didi

linux - 打印第一行部分,直到到达第一个空间

转载 作者:太空宇宙 更新时间:2023-11-04 10:43:36 25 4
gpt4 key购买 nike

我在一个文件中有一个所有卫星 channel 的列表。我只想获取属于特定子 channel 的子 channel 。($i 是以下示例中的基本 channel 1。)

文件的原始内容:

B base channel1
C child channel1
C child channel2

B base channel2
C child channel3

B base channel3
C child channel4

我只想得到:

child channel1
child channel2

我试过:

cat /tmp/channel_list | grep -E -A10 '(^| )'$i'( |$)'| \
grep -E -A10 '(^| )'$i'( |$)' | sed -n '/^B/,/^B/p' | \
grep -v B | perl -i -pe 's/\s+\n/\n/' | sed 's/^ *//; s/ *$//; /^$/d'

产生:

C       child channel1
C child channel2
C child channel3

但我想要这个 - 我怎么才能得到这个?

child channel1
child channel2

最佳答案

假设您有一个包含字符串 base channel1 的 shell 变量 $i,您可以使用这样的 awk 脚本:

awk -v channel="$i" '$0 ~ channel { f = 1; next } !NF { f = 0 } f { print $2, $3 }' file

当行匹配存储在变量中的模式时,标志 f 被设置,程序跳到下一行。当没有字段(空行)时,它是未设置的。设置标志后,打印第二个和第三个字段。

您可以通过重新排列 block 来避免使用 next,因此 f 仅在匹配的行上检查后才设置:

awk -v channel="$i" '!NF { f = 0 } f { print $2, $3 } $0 ~ channel { f = 1 }' file

关于linux - 打印第一行部分,直到到达第一个空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com