【问题标题】:Use values in a column to separate strings in another column in bash在 bash 中使用列中的值来分隔另一列中的字符串
【发布时间】:2021-10-15 13:49:44
【问题描述】:

我正在尝试使用另一列中的值分隔一列字符串,也许举个例子会让您更容易理解。

输入是一个表格,第 2 列中的字符串用逗号分隔,
第三列是应该输出的字段号,,作为第二列的分隔符。

Ben mango,apple 1
Mary    apple,orange,grape  2
Sam apple,melon,*   3
Peter   melon   1

输出应如下所示,其中不应输出与星号对应的记录(不输出 Sam 行):

Ben mango
Mary    orange
Peter   melon

我可以使用 for 循环生成所需的输出,但我认为这很麻烦:

IFS=$'\n'
for i in $(cat input.txt)
do
    F=`echo $i | cut -f3`
    paste <(echo $i | cut -f1) <(echo $i | cut -f2 | cut -d "," -f$F) | grep -v "\*"
done

是否有任何一种方法可以使用sedawk?提前致谢。

【问题讨论】:

    标签: linux bash unix awk sed


    【解决方案1】:

    awk 中执行此操作的关键是split() 函数,该函数根据匹配分隔符的正则表达式填充数组以拆分字符串:

    $ awk '{ split($2, fruits, /,/); if (fruits[$3] != "*") print $1, fruits[$3] }' input.txt
    Ben mango
    Mary orange
    Peter melon
    

    【讨论】:

      猜你喜欢
      • 2020-09-26
      • 2015-03-05
      • 2019-12-20
      • 1970-01-01
      • 2023-03-20
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多