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

cdmah0mi  于 2022-11-04  发布在  Unix
关注(0)|答案(4)|浏览(195)

我在unix中有以下文件:

1098000000199400000099400000010110000000000007000+00000000000001400000032
2010199434117300000017300000010110000000000007000+00000000000000400000009
1010199434117300000017300000010110000000000007000+00000000000000400000009

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

awk '{ $50 = ""; print>"new.txt" }' file.txt
3qpi33ja

3qpi33ja1#

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

cut -c1-49,51- file.txt
imzjd6km

imzjd6km2#

虽然@沃尔特A的回答很完美,但我会给予另一种方法,这种方法速度较慢,但适用范围更广:
用vim打开输入文件:

vim input.txt

您将处于“正常模式”。键入50|转到第50列。
然后按Ctrl+V,你就会进入“块选择模式”。
然后,您可以使用箭头导航,标记一列或多列块(实际上是任何方块文本),然后按d删除该块。
这允许你以交互方式批量编辑列。它还允许你做除删除之外的其他操作,例如,复制到剪贴板(通过使用“+y代替d)。

xyhw6mcr

xyhw6mcr3#

您也可以使用sed来完成此操作。
sed -i '/要替换字符串/替换为/g'文件名
sed -i '的/+//g'文件名
因为在这里你只想用nothing来替换'+'
sed -i将编辑原始文件
使用sed -e 's/+//g' filename〉newfile写入单独的文件

相关问题