Мое решение состояло в том, чтобы писать напрямую в rtc, используя ioctrl. Вот реализация для тех, кто сталкивался с этим:
#include <linux/rtc.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main(void)
{
int fd;
fd = open("/dev/rtc0",0);
if (fd < 0)
printf("Can't open rtc!");
struct rtc_time time;
time.tm_sec = 12;
time.tm_min = 12;
time.tm_hour = 7;
time.tm_mday = 12;
time.tm_mon = 7;
time.tm_year = 118;
if (ioctl(fd, RTC_SET_TIME, &time) < 0 )
printf("Set rtc failed!");
return 0;
}
Попробуйте это awk . Работает с любым количеством файлов из коробки.
Примечание :Будьте осторожны с пробелами в конце слов во входных данных.
$ awk '{ str=tolower($0); a[str]++; aa[str]=$0; b[str]=b[str]" "FILENAME }
END{ for(i in a){ if(a[i]==1){ print aa[i],b[i] } } }' file1 file2
address_3 file1
Bill_ID file2
Если вы хотите, чтобы таблица -была похожа на вывод, добавьте один форматирующий awk к первому. Результат готов для копирования -и вставки, например. Эксель. Конечно, TAB s и , в строках портят форматирование.
$ awk '{ str=tolower($0); a[str]++; aa[str]=$0; b[str]=b[str]","FILENAME }
END{ for(i in a){ if(a[i]==1){ print aa[i]b[i] } } }' file1 file2 |
awk -F ',' '{ nm_a[$NF]++; a[$NF,nm_a[$NF]]=$1 }
END{ for(i in nm_a){ printf "%s\t",i; if(max<nm_a[i]){ max=nm_a[i] } };
print ""; for(j=1;j<=max;j++){ for(i in nm_a){ printf "%s\t",a[i,j] }
print "" } }'
file2 file1
Bill_ID address_3
Предполагая, что, как и в вашем опубликованном образце ввода, одно и то же слово не появляется несколько раз ни в одном из входных файлов, а затем при использовании любого awk в любой оболочке на каждом компьютере Unix:
$ cat tst.awk
BEGIN {
OFS="\t"
print ARGV[1], ARGV[2]
}
{ lc = tolower($1) }
NR==FNR {
file1[lc] = $1
next
}
lc in file1 {
delete file1[lc]
next
}
{
print "", $1
}
END {
for (lc in file1) {
print file1[lc], ""
}
}
$ awk -f tst.awk file1 file2
file1 file2
Bill_ID
address_3