当第一个文件中的模式出现在另一个文件中时,如何在新列中打印行号?
How to print line number in new column when patterns from first file occur in another file?
我是新来的,如果我的消息格式不正确,请见谅。
我有几个文件,文件 1 仅包含参考模式,其他文件包含各种信息。我想在新列中恢复行号,其中 file1 的模式出现在每个其他文件中。如果可能的话,我希望相应的文件名包含在header中。
最后,我希望从最终输出中删除所有缺少值的行。
文件 1:
Entry
abc
def
ghi
jkl
mno
xyz
文件 2:
line1: red|31000|ghi
line2: purple|25640|mno
line3: yellow|9560|abc
line12: blue|2630|def
line120: white|1|xyz
文件 3:
line1: blue|144009|def
line2: red|100000|ghi
line3: purple|60500|mno
line52: white|2|xyz
预期最终输出:
Entry|file2|file3
def|12|1
ghi|1|2
mno|2|3
xyz|120|52
我想有一个使用 awk 的解决方案,但我不是很能自己处理它(抱歉)。我尝试使用 grep,我知道它可以打印行号并比较多个文件,但它可能不是一个好的选择,因为它按最初的方式打印了第二个文件。
grep -Fnf file1 file2 > output
非常感谢您的帮助!
使用 GNU join、GNU sort、GNU awk 和 bash:
join -t '|' -j 4 <(awk 'BEGIN{FS=OFS="|"} {print NR,[=10=]}' file2 | sort -t '|' -k4) <(awk 'BEGIN{FS=OFS="|"} {print NR,[=10=]}' file3 | sort -t '|' -k4) -o 1.4,1.1,2.1
我是新来的,如果我的消息格式不正确,请见谅。
我有几个文件,文件 1 仅包含参考模式,其他文件包含各种信息。我想在新列中恢复行号,其中 file1 的模式出现在每个其他文件中。如果可能的话,我希望相应的文件名包含在header中。
最后,我希望从最终输出中删除所有缺少值的行。
文件 1:
Entry
abc
def
ghi
jkl
mno
xyz
文件 2:
line1: red|31000|ghi
line2: purple|25640|mno
line3: yellow|9560|abc
line12: blue|2630|def
line120: white|1|xyz
文件 3:
line1: blue|144009|def
line2: red|100000|ghi
line3: purple|60500|mno
line52: white|2|xyz
预期最终输出:
Entry|file2|file3
def|12|1
ghi|1|2
mno|2|3
xyz|120|52
我想有一个使用 awk 的解决方案,但我不是很能自己处理它(抱歉)。我尝试使用 grep,我知道它可以打印行号并比较多个文件,但它可能不是一个好的选择,因为它按最初的方式打印了第二个文件。
grep -Fnf file1 file2 > output
非常感谢您的帮助!
使用 GNU join、GNU sort、GNU awk 和 bash:
join -t '|' -j 4 <(awk 'BEGIN{FS=OFS="|"} {print NR,[=10=]}' file2 | sort -t '|' -k4) <(awk 'BEGIN{FS=OFS="|"} {print NR,[=10=]}' file3 | sort -t '|' -k4) -o 1.4,1.1,2.1