使用 cut 或 awk 从 unix 文件中删除列

Deleting column with cut or awk from a file in unix

我在 unix 中有以下文件:

1098000000199400000099400000010110000000000007000+00000000000001400000032
2010199434117300000017300000010110000000000007000+00000000000000400000009
1010199434117300000017300000010110000000000007000+00000000000000400000009

我需要使用 awk 或 cut 命令删除第 50 位带有“+”的列。 我试图使用类似下面代码的东西,但它像字段一样处理它,我需要像列一样处理它:

awk '{  = ""; print>"new.txt" }' file.txt

您需要第 1 到 49 列以及 50 以上的所有内容:

cut -c1-49,51- file.txt

虽然@Walter A的回答很完美,但我会给出另一种方法,速度较慢,但​​适用范围更广:

用vim打开输入文件:

vim input.txt

您将在 "normal mode"。通过键入 50|.

转到第 50 列

然后按Ctrl+V,就会输入"block selection mode".

然后您可以使用箭头导航以标记一列或多列块(实际上是任何正方形文本),然后按 d 删除该块.

这实际上允许您以交互方式批量编辑列。它还允许您执行除删除之外的其他操作,例如复制到剪贴板(使用 "+y 而不是 d)。