如何使用 awk 或 sed 打印第一列中的空格

如何使用 awk 或 sed 打印第一列中的空格

这是我的示例输入文件。

ip.txt:

john    math
        science
paul    math
        science
rosy    math
jill    science
rob     math
        science
hary    math

期望的输出:

john

paul

rosy
jill
rob

hary

当我使用时:

awk '{print $1}' ip.txt

我的输出是:

john
science
paul
science
rosy
jill
rob
science
hary

我不想打印第二列值,我希望将空格打印到文件中。

我怎样才能实现这个目标?我正在使用 Solaris 5.10 和ksh.

答案1

awk:

awk '{print (NF>1) ? $1 : ""}' file

如果字段数大于 1,则打印第一个字段,否则打印空行。

一些额外的想法:

  • 如果您的数据是制表符分隔的,那么

    awk -F '\t' '{print $1}' file
    
  • 如果你想提取前8个字符

    awk '{print substr($0,1,8)}' file
    

答案2

使用 POSIX sed:

sed -e 's/^\([^[:blank:]]*\)[[:blank:]].*/\1/;t' -ed <file

答案3

如果您想要主题字段之前的所有额外空格,您可以执行以下操作:

grep -o "^[^ ]* \+" ip.txt

如果您不想要额外的空格:

sed 's/ \+.*//' ip.txt

这两者都将保留具有空名称字段的行。

相关内容