【问题标题】:Treat second column with spaces as one column with awk将带有空格的第二列视为带有 awk 的一列
【发布时间】:2013-01-15 06:55:43
【问题描述】:

对于一个看起来像这样的文件:

Paul    white male 34 
Jane    black female 22
Sam     white male 44

我想要一条 awk 行将第一列之后的所有内容与第二列放在同一行,这样我就可以在上面运行它并生成以下内容

white male 34 
black female 22
white male 44

目前,awk '{print $2} 只会输出第一个单词,而不是该行的其余部分。

谢谢!

【问题讨论】:

  • Paul 和 white 之间是一个制表符还是一串空白字符?

标签: shell awk


【解决方案1】:

其中一个应该适合您,具体取决于第一个空格字符是什么,其余的空格是:

awk '{sub(/[^ ]+[ ]+/,"")}1' file
awk -F'\t' '{print $2}' file

【讨论】:

  • +1,我认为第一个更好。如果 OP 不介意开头有多余的空格,那么:awk '{$1="";print}' file 也可以。
  • 分配 $1 会弄乱行上的其他空格,这可能是不可取的。
【解决方案2】:

Ed Morton 为您的需求提供了标准方法和工作。

我会提到另一种(棘手的)方式:

在您的 awk 行中,您可以设置 $1="",而不是打印 $2,然后打印整行。

awk '!($1="")' file

看测试:

kent$  echo "Paul    white male 34 
Jane    black female 22
Sam     white male 44"|awk '!($1="")'
 white male 34
 black female 22
 white male 44

这个单行很短,给你输出。但是每行都有一个前导空格。它也很容易通过以下方式删除:

awk '!($1="")&&gsub(/^ /,"")'

【讨论】:

    猜你喜欢
    • 2020-09-16
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多