Awk在单独的行上打印不同的字符
我一直在搜索,找不到答案。。。不知道这里是否有人能帮忙 假设我有一个包含以下内容的文件: 文件1: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' 但是,如
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