美好的一天。
我使用Grep根据ID文件的模式从文件中提取读数。
grep -w -f idFile.txt readingFile.txt
我获得的Grep I的输出是:
F47807 0.00 0.00 8.30
R02218 0.00 0.00 2.07
W74941 0.00 0.00 5.70
C15915 0.00 0.00 3.63
C16638 0.00 0.39 8.82
C16979 0.00 0.39 2.59
假设ID文件是:
W74941
F47807
C15915
R02218
C16638
C16979
我想让Grep输出与ID文件相同的模式,如下所示:
W74941 0.00 0.00 5.70
F47807 0.00 0.00 8.30
C15915 0.00 0.00 3.63
R02218 0.00 0.00 2.07
C16638 0.00 0.39 8.82
C16979 0.00 0.39 2.59
我试过几个Grep选项,但我没能得到我想要的东西。因此,请社区请您给我一些建议我该怎么做?
非常感谢你的时间。
答案 0 :(得分:1)
我不知道你是否只能用grep来做这件事,但是如果你使用了一些bash,你可以这样做:
for line in $(cat idFile.txt)
do grep "$line" readingFile.txt
done
对于每个id,这将覆盖一次readFile,所以如果表现出来担心,这对你没有帮助。
编辑:请注意,这假设id不包含空格。
答案 1 :(得分:1)
稍微awk
你可以做这样的事情 -
awk 'NR==FNR {
a[$1]=$0
next
}
($1 in a) {
print a[$1]
}' <(grep -w -f idFile.txt readingFile.txt) idfile
awk
是/pattern/ {action}
语句的组合。我们的第一个模式NR==FNR
确保我们的操作仅在传递给awk的第一个文件上执行(在我们的例子中是grep输出)。action
就是将它存储在一个数组中。 pattern-action
语句将生效。pattern-action
语句检查您的idfile的第一个条目是否存在于数组中。如果是,则打印出来。因此,您可以根据idfile中的序列获得输出。 答案 2 :(得分:1)
这个单行应该使用你的grep输出和idfile:
awk 'NR==FNR{a[$1]=$0;next}$1 in a&&$0=a[$1]'
完整的一行:
awk 'NR==FNR{a[$1]=$0;next}$1 in a&&$0=a[$1]' <(grep -w -f idFile.txt readingFile.txt) idfile