2

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

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} 只会输出第一个单词,而不是该行的其余部分。

谢谢!

4

2 回答 2

2

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

awk '{sub(/[^ ]+[ ]+/,"")}1' file
awk -F'\t' '{print $2}' file
于 2013-01-14T22:02:16.337 回答
0

Ed Morton 提供了一种标准的方法,可以满足您的需求。

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

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

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(/^ /,"")'
于 2013-01-14T22:55:43.183 回答