对于这里的一些专家来说这一定很容易 - 我无法弄清楚:
File1:
0000001 test1
;0000002 test2
;0000003 test3
0000005 test5
;00000006 test6
File2:
000001 test1
000002 test2
000003 test3
000004 test4
000005 test5
000006 test6
000007 test7
输出应为:
000001 test1
;000002 test2
;000003 test3
000004 test4
000005 test5
;000006 test6
000007 test7
注意: - 两个文件都已排序;
- 输出文件应与File2具有相同的行数,并带有“;”从File1复制的char。
非常有责任
答案 0 :(得分:2)
这就是诀窍:
#!/bin/sh
while read f2line
do
# strip just the test id (chars after the space)
testId=`echo $f2line | awk '{print $2}'`
# If file1 has a line for the test starting with a ';' then prefix the line
# from file2 with a ';', else just print the line from file2
grep -q ";[1234567890]\+ $testId" file1
if [ $? = 0 ] ; then
echo ";$f2line"
else
echo $f2line
fi
done < file2
答案 1 :(得分:2)
未测试:
awk '
NR==FNR {if ($0 ~ /^;/) comment[substr($1,2)+0] = 1; next}
($1+0) in comment {print ";" $0; next}
{print}
' file1 file2
使用“+0”将“0001”转换为“1”,因为第一个字段在两个文件中具有不同数量的0。
答案 2 :(得分:1)
这可能适合你(GNU sed):
sed '/^;0*\(......\) .*/!d;s||/^\1/s/^/;/|' file1 | sed -f - file2
000001 test1
;000002 test2
;000003 test3
000004 test4
000005 test5
;000006 test6
000007 test7