在 bash 中使用 sed 或 awk 编辑 csv 的第一列

在 bash 中使用 sed 或 awk 编辑 csv 的第一列

我有一个 csv 文件,想通过删除“;”之后的所有内容来编辑包含科学论文标题的第一列。符号。

因此,典型的标题将具有以下形式:

long scientific title here;other stuff I want to delete including the semicolon (no space between ; and the text)

我希望标题看起来像这样:

long scientific title here

我如何使用sedawk(如果这很重要,在 macOS 上)实现这一点?

答案1

如果您想删除每行第一个分号之后的所有内容:

cut

cut -d';' -f1 file
  • -d';'使用分号作为分隔符
  • -f1打印第一个字段

awk

awk -F';' '{ print $1 }' file

类似于cut:使用分号作为输入字段分隔符并打印第一个字段。


sed

sed 's/;.*//' file

将分号和任何后续字符替换为空字符串。

答案2

因为这是第一专栏,我认为 (GNU) sed 就足够了。假设列分隔符是制表符:

sed -E 's/^(.*);.*\t/\1\t/' file

答案3

您的操作系统包含许多进行文本处理的小而简单的工具。在这种情况下我会使用cut

cut -d; -f1 <FILE >tmpfile && mv tmpfile FILE

相关内容