使用awk删除特定行的第n个字段
Delete nth field of specific line using awk
我无法弄清楚如何删除 awk 脚本中特定行的第 n 个字段。基本上我有 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
$ awk -F'\t' '!="oil"{[=10=] = FS " " FS } 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
我无法弄清楚如何删除 awk 脚本中特定行的第 n 个字段。基本上我有 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
$ awk -F'\t' '!="oil"{[=10=] = FS " " FS } 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