从文件中的字符串中删除特定字符串



我想删除分号分隔文件中所有字符串中的特定字段。

该文件看起来像这样:-

texta1;texta2;texta3;texta4;texta5;texta6;texta7
textb1;textb2;textb3;textb4;textb5;textb6;textb7
textc1;textc2;textc3;textc4;textc5;textc6;textc7

我想从文件中的所有字符串中删除位置 2、5 和 7。

期望输出:-

texta1;texta3;texta4;texta6
textb1;textb3;textb4;textb6
textc1;textc3;textc4;textc6

我正在尝试使用"awk"编写一个小的 shell 脚本,但代码没有按预期工作。我仍然看到中间和末尾的分号没有被删除。

(注意 - 我能够用"sed"做到这一点,但我的文件有数十万条记录,并且 sed 代码需要很多时间)

你能提供一些帮助吗?提前谢谢。

最简单的是cut

cut -d ; -f 1,3-4,6,8- filename

cut -d ; -f 2,5,7 --complement filename

不过,我认为--complement是特定于GNU的。对于只有七列的文件,第一个示例中的8-实际上不是必需的;它将包括第八个前锋的所有列(如果存在的话)。我包括它,因为它不会造成伤害,并为问题提供了更通用的解决方案。

我投票通过了@Wintermute,但是如果您无法使用cut --complement或者您坚持使用awk,那么您可以执行以下操作:

awk -v scols=2,5,7 'BEGIN{FS=";"; OFS=";"} {
 split(scols,acols,","); for(i in acols) $acols[i]=""; gsub(";;", ";"); print}' tmp.txt

相关内容

  • 没有找到相关文章

最新更新