【问题标题】:Delete nth field of specific line using awk使用 awk 删除特定行的第 n 个字段
【发布时间】:2015-09-13 14:35:56
【问题描述】:

我无法弄清楚如何删除 awk 脚本中特定行的第 n 个字段。基本上我有4个字段,我将第二个和第三个字段合并为一个,设置第三个字段等于第四个字段,现在我需要消除第四个字段。

看起来像这样:

$2=$2" "$3
$3=$4
$4=""

这不起作用,因为即使 $4 现在是一个空字符串,它们仍然是一个关于 $3 的尾随制表符,我相信也是 $4。我需要一种方法将这一特定行缩减为前 3 个字段,但我无法弄清楚如何。有什么帮助吗?

输入行如下所示:

string1 [tab] string2 [tab] string3 [tab] string4

我正在尝试使输出行看起来像这样:

string1 [tab] string2 string3 [tab] string4]

这是在条件范围内,所以 我需要它在当前单独的行上运行,而不是在文件中的每一行上运行

例如,假设我有以下输入文件:

12345    jones, michael    madison    0101-10101-2
12345    water    oil    0101-10101-2
12346    jones, mike    mason    0101-10101-3
12347    jones, nick    norris    0101-10101-4

我想保留上面的第二行,因为第三个字段是oil,但合并第二个和第三个字段,否则我的预期输出将是:

12345    jones, michael madison    0101-10101-2
12345    water    oil    0101-10101-2
12346    jones, mike mason    0101-10101-3
12347    jones, nick norris    0101-10101-4

【问题讨论】:

    标签: bash text replace awk field


    【解决方案1】:
    $ awk -F'\t' '$3!="oil"{$0 = $1 FS $2 " " $3 FS $4} 1' file     
    12345   jones, michael madison  0101-10101-2
    12345   water   oil     0101-10101-2
    12346   jones, mike mason       0101-10101-3
    12347   jones, nick norris      0101-10101-4
    

    【讨论】:

    • 这不会对文件中的每一行执行组合操作吗?
    猜你喜欢
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 2017-11-22
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多