从linux中的分隔文件中删除一列

MyF*_*ame 9 unix linux awk sed

我有一个以下格式的文件:

col1|col2|col3|col4
a|b|c|d
e|f||h
i|j|k|l
Run Code Online (Sandbox Code Playgroud)

我想从标题和数据中删除col3(带分隔符"|").这可以使用awk/sed完成吗?

请注意col3中的数据可能为空(第2行).

输出应该是:

col1|col2|col4
a|b|d
e|f|h
i|j|l
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 18

你可以简单地使用cut.

cut -d'|' -f1-2,4- file
Run Code Online (Sandbox Code Playgroud)

  • 我需要得到一个纹身,上面写着:"你试过切割吗?" (3认同)
  • @Dean - 切口不会更合适吗? (3认同)
  • 需要注意的是,如果您有一个制表符分隔的文件,您可以通过在命令行上使用 -d $'\t' 来指定制表符。 (2认同)

pot*_*ong 5

这可能对你有用(GNU sed 或 cut):

sed 's/[^|]*|//3' file
Run Code Online (Sandbox Code Playgroud)

选择:

cut -f3 -d'|' --co file
Run Code Online (Sandbox Code Playgroud)

NB--co是缩写--complement,并且在删除最后一个字段时该剪切也有效。


Ken*_*ent 0

awk  'BEGIN{FS=OFS="|"}{print $1,$2,$4}'   file
Run Code Online (Sandbox Code Playgroud)

应该给你输出。

这是非常基本的 awk 用法。

编辑

你没有提到 70 列...:(

尝试这个:

awk  -F'|' '{s="";for(i=1;i<=NF;i++){f=(NF==i)?"":FS;if(i!=3)s=s $i f;}print s}' file
Run Code Online (Sandbox Code Playgroud)