Примените комментарии (вставьте «;» в качестве первого символа) во второй файл - PullRequest
1 голос
/ 03 апреля 2012

Это должно быть легко для некоторых экспертов здесь - я не могу понять:

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.

Большая обязанность

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Непроверенные:

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 голосов
/ 03 апреля 2012

Это делает трюк:

#!/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 голос
/ 03 апреля 2012

Это может сработать для вас (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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...