Добавить новый столбец с таким же значением было найдено в 2 столбцах - PullRequest
1 голос
/ 14 февраля 2020

Добавить новый столбец со значением, указывающим, сколько раз значения в столбцах 1 и 2 совпадают с одним и тем же значением.

входной файл

46849,39785,2,012,023,351912.29,2527104.70,174.31
46849,39785,2,012,028,351912.45,2527118.70,174.30
46849,39785,3,06,018,351912.12,2527119.51,174.33
46849,39785,3,06,020,351911.80,2527105.83,174.40
46849,39797,2,012,023,352062.45,2527118.50,173.99
46849,39797,2,012,028,352062.51,2527105.51,174.04
46849,39797,3,06,020,352063.29,2527116.71,174.13,
46849,39809,2,012,023,352211.63,2527104.81,173.74
46849,39809,2,012,028,352211.21,2527117.94,173.69
46849,39803,2,012,023,352211.63,2527104.81,173.74
46849,39803,2,012,028,352211.21,2527117.94,173.69
46849,39801,2,012,023,352211.63,2527104.81,173.74

Ожидаемый выходной файл:

4,46849,39785,2,012,023,351912.29,2527104.70,174.31
4,46849,39785,2,012,028,351912.45,2527118.70,174.30
4,46849,39785,3,06,018,351912.12,2527119.51,174.33
4,46849,39785,3,06,020,351911.80,2527105.83,174.40
3,46849,39797,2,012,023,352062.45,2527118.50,173.99
3,46849,39797,2,012,028,352062.51,2527105.51,174.04
3,46849,39797,3,06,020,352063.29,2527116.71,174.13,
2,46849,39809,2,012,023,352211.63,2527104.81,173.74
2,46849,39809,2,012,028,352211.21,2527117.94,173.69
2,46849,39803,2,012,023,352211.63,2527104.81,173.74
1,46849,39803,2,012,028,352211.21,2527117.94,173.69
1,46849,39801,2,012,023,352211.63,2527104.81,173.74

попытка:

awk -F, '{x[$1 $2]++}END{ for(i in x) {print i,x[i]}}' file

4684939785 4
4684939797 3
4684939801 1
4684939803 2
4684939809 2

1 Ответ

1 голос
/ 14 февраля 2020

Не могли бы вы попробовать следующее.

awk '
BEGIN{
  FS=OFS=","
}
FNR==NR{
  a[$1,$2]++
  next
}
{
  print a[$1,$2],$0
}
' Input_file Input_file

Объяснение: чтение Input_file 2 раза. В первый раз я создаю массив с именем a с индексом первого и второго поля и подсчитываю их значение в каждом случае. При чтении файла во второй раз печатается счетчик первых двух полей и затем печатается в строке.

Один код строки:

awk 'BEGIN{FS=OFS=","} FNR==NR{a[$1,$2]++;next} {print a[$1,$2],$0}' Input_file Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...