从某个位置删除元素

时间:2016-12-01 08:30:54

标签: bash awk sed

我有一个包含三列的文件。从某些行我想删除第三列中的元素。我还有一个包含行数的列表,我想从中删除第三个元素。

我的文件如下:

2.34 5.3974 8.202847
8.271 6.294 9.04
9.2846 5.847 1.372

我的行号列表:

2
3

欲望输出:

2.34 5.3974 8.202847
8.271 6.294 
9.2846 5.847

当我有一个小文件时,我只使用了:awk '{if (NR==2 || NR==3) $3=""; print}' file。 但是这个解决方案不起作用,如果我有~1500行改变。如何使用bash和awk(或sed)? 我很感激所有的建议。

1 个答案:

答案 0 :(得分:3)

一种解决方案是将行号保存在文件中lines并使用awk来读取该文件和输入文件以过滤掉行。

示例

$ cat lines
2
3
$ awk 'FNR==NR{line[$0]++; next} FNR in line{$3=""}1' lines file
2.34 5.3974 8.202847
8.271 6.294
9.2846 5.847