Awk在单独的行上打印不同的字符

Awk在单独的行上打印不同的字符,awk,grep,Awk,Grep,我一直在搜索,找不到答案。。。不知道这里是否有人能帮忙 假设我有一个包含以下内容的文件: 文件1: name Joe day Wednesday lunch was fish name John dinner pie day tuesday lunch was noodles name Mary day Friday lunch was fish pie 我只想把他们的名字和午餐吃的东西打印出来 我想我能行 cat file1 | grep -iE 'name|lunch' 但是,如

我一直在搜索,找不到答案。。。不知道这里是否有人能帮忙

假设我有一个包含以下内容的文件:

文件1:

name Joe 
day Wednesday
lunch was fish

name John 
dinner pie
day tuesday
lunch was noodles

name Mary
day Friday
lunch was fish pie
我只想把他们的名字和午餐吃的东西打印出来

我想我能行

cat file1 | grep -iE 'name|lunch'
但是,如果我想做一个awk,让他们的名字和食物像下面这样输出呢

Joe
fish
John
noodles
Mary
fish pie
我知道使用awk打印,但这可能需要awk,awk是否可以在一行上打印$2,在另一行上打印$3

我也可以用这种格式输出它:

Person food
Joe    fish
John   noodles
Mary   fish pie

谢谢

例如,你可以说:

$ awk '/name/ {print $2} /lunch/ {$1=$2=""; print}' file
Joe
  fish
John
  noodles
Mary
  fish pie
或删除
午餐内容
文本:

awk '/name/ {print $2} /lunch/ {gsub("lunch was ",""); print}' file

要在两列中进行输出,请执行以下操作:

$ awk -v OFS="\t" '/name/ {name=$2} /lunch/ {gsub("lunch was ",""); print name, $0}' a
Joe     fish
John    noodles
Mary    fish pie

例如,你可以说:

$ awk '/name/ {print $2} /lunch/ {$1=$2=""; print}' file
Joe
  fish
John
  noodles
Mary
  fish pie
或删除
午餐内容
文本:

awk '/name/ {print $2} /lunch/ {gsub("lunch was ",""); print}' file

要在两列中进行输出,请执行以下操作:

$ awk -v OFS="\t" '/name/ {name=$2} /lunch/ {gsub("lunch was ",""); print name, $0}' a
Joe     fish
John    noodles
Mary    fish pie
awk 有了awk,你可以一次完成

awk -v RS="" '{n=$2;sub(/.*lunch was\s*/,"");print n,$0}' file
注意,使用这一行程序,输入文件的格式应该是固定的。您的数据应存储在数据块中,
lunch was
行应位于每个数据块的末尾

用您的示例进行测试:

kent$  awk -v RS="" '{n=$2;sub(/.*lunch was\s*/,"");print n,$0}' file 
Joe fish
John noodles
Mary fish pie
格雷普与塞德 此外,您还可以分两步完成,将值灰显出来,并合并行

grep -Po 'name\s*\K.*|lunch was\s*\K.*' file|sed 'N;s/\n/ /'
使用您的输入文件,它将输出:

kent$  grep -Po 'name\s*\K.*|lunch was\s*\K.*' file|sed 'N;s/\n/ /'
Joe fish
John noodles
Mary fish pie
awk 有了awk,你可以一次完成

awk -v RS="" '{n=$2;sub(/.*lunch was\s*/,"");print n,$0}' file
注意,使用这一行程序,输入文件的格式应该是固定的。您的数据应存储在数据块中,
lunch was
行应位于每个数据块的末尾

用您的示例进行测试:

kent$  awk -v RS="" '{n=$2;sub(/.*lunch was\s*/,"");print n,$0}' file 
Joe fish
John noodles
Mary fish pie
格雷普与塞德 此外,您还可以分两步完成,将值灰显出来,并合并行

grep -Po 'name\s*\K.*|lunch was\s*\K.*' file|sed 'N;s/\n/ /'
使用您的输入文件,它将输出:

kent$  grep -Po 'name\s*\K.*|lunch was\s*\K.*' file|sed 'N;s/\n/ /'
Joe fish
John noodles
Mary fish pie

不客气!既然你是新来的,别忘了在对理解和解决问题最有帮助的时候标记一个被接受的答案。不客气!因为你是新来的,所以不要忘了在对理解和解决问题有帮助的时候标记一个被接受的答案。小心你的手指,你多次取消/接受:D小心你的手指,你多次取消/接受:D