我有两个文件,FileA和File B.文件A包含所有数据。文件B包含我想要在文件A中找到的感兴趣的序列。我正在使用的实际文件中有超过6000行。
档案A:
Name1
Apples
Name2
Pears
Name3
Pears
Name4
Grapes
Name5
Apples
档案B:
Apples
Pears
我想编写一个unix命令或python脚本,它允许我只打印感兴趣的序列上方的行。
我尝试过使用此命令:
grep -B 1 -f FileB FileA | awk -F '\n' 'ln ~ /^$/ { ln = "matched"; print $1 } $1 ~ /^--$/ { ln = "" }'
但我得到以下列表,没有任何方法可以区分苹果和梨的名称
Name1
Name5
Name2
Name3
我想要的是这样的:
Apples
Name1
Name5
Pears
Name2
Name3
然后我需要这个列表成为这样的:
Apples >Name 1, Name 5
Pear > Name 2, Name 3
我对编程非常陌生,任何建议都会很棒!
答案 0 :(得分:0)
cat B.txt | xargs -III sh -c \
'echo II "\> "; grep II A.txt -B1 | grep -v "\-\-" | grep -v II '
这份工作。
苹果
名1
NAME5
梨
名称2
NAME3
之后,您可以使用sed
将号码与号码分开。
答案 1 :(得分:0)
输入 FileA ,一些sed
代码将流转换为fruit Name#N
格式,然后datamash
将其折叠在字段#2上,并brudenellridingstables.com 1}}仅输出所需的行:
grep
输出:
sed -n 'h;n;G;s/\n/ /p' < FileA | datamash -W -s -g1 collapse 2 | grep -f FileB
答案 2 :(得分:0)
由于您似乎已经熟悉awk,为什么不尝试使用简单的awk片段来完成整个工作:
$ awk 'NR==FNR{a[$1]=(!a[$1]?prev:a[$1]", "prev);prev=$1;next}$1 in a{print $1" > "a[$1]}' fileA fileB
Apples > Name1, Name5
Pears > Name2, Name3
如果您需要详细解释此代码段,请与我们联系。