如何在表格文件的特定列中使用 sed

如何在表格文件的特定列中使用 sed

我有一个表格文件A.tsv(分隔符= \t):

20655|dkljdjj   66  lala
20644|kmkmoii   75  lolo
20477|kmlkooo   88  lili

我想删除第一列中||管道包含)之后的所有内容,以便:

20655   66  lala
20644   75  lolo
20477   88  lili

我知道如何使用 sed 做到这一点:sed 's/|.*//' A.tsv > B.tsv但它会删除管道之后的所有内容,而不仅仅是第一列。

那么你知道该怎么做吗?也许与 awk 结合使用?谢谢

答案1

您可以将.(任何字符)替换为[^\t](除制表符之外的任何字符)或[^[:blank:]](不包括水平空格的任何字符):

sed 's/|[^\t]*//' A.tsv > B.tsv

sed 's/|[^[:blank:]]*//' A.tsv > B.tsv

如果您更喜欢 awk:

awk '{sub(/\|.*/,"",$1)} 1' OFS='\t' A.tsv

答案2

您还可以使用分组sed

sed -E 's/(\S+)\|\S+\s(.*$)/\1\2/' inputfile

输出

20655  66  lala
20644  75  lolo
20477  88  lili

相关内容