使用 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)。
我在 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|
.
然后按Ctrl+V,就会输入"block selection mode".
然后您可以使用箭头导航以标记一列或多列块(实际上是任何正方形文本),然后按 d 删除该块.
这实际上允许您以交互方式批量编辑列。它还允许您执行除删除之外的其他操作,例如复制到剪贴板(使用 "+y 而不是 d)。