Используйте файл ID для замены некоторых столбцов в наборе данных, а затем распечатайте весь набор данных - PullRequest
0 голосов
/ 14 ноября 2018

Все еще плохо знаком с кодированием и испытываю трудности с подключением команд для получения требуемого вывода.

У меня есть файл данных в следующем формате:

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,20141208,6,2,92,1,2014,424.4410055,NA,1
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,20141207,6,2,91,1,2014,380.94688,NA,6
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,20141207,6,2,91,1,2014,380.94688,NA,9

В данных я хотел бы найти строки, в которых переменная YBr == 1, и заменить все столбцы в этой строке на *, за исключением NationalCowID или qtl. Затем распечатайте весь набор данных.

Это то, чего я пытаюсь достичь

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,20141208,*,*,*,*,*,*,*,*,1
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,20141207,*,*,*,*,*,*,*,*,6
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,20141207,*,*,*,*,*,*,*,*,9

Я решил использовать sed и awk, но изо всех сил пытаюсь выйти за рамки основ и использовать команды в комбинации:

awk -F ',' '{ if ($3 == 1) sed '{s/$0/*/g}' print $0}'}' file1 > file2

Любое направление будет по-настоящему оценено!

1 Ответ

0 голосов
/ 14 ноября 2018

Так как вы не показали нам пример ожидаемого выхода, поэтому не можете быть уверены в следующем. По этому решению я не жестко кодирую значения полей строк YBr или NationalCowID, поэтому он также может быть динамическим. Не могли бы вы попробовать следующий раз.

awk '
BEGIN{
  FS=OFS=","
}
FNR==1{
  for(i=1;i<=NF;i++){
    if($i=="YBr"){
       field=i
    }
    if($i=="NationalCowID"){
       value=i
    }
  }
}
$field==1{
  for(i=value+1;i<=NF;i++){
       $i="*"
  }
}
1
' Input_file

Вывод будет следующим.

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,*,*,*,*,*,*,*,*,*
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,*,*,*,*,*,*,*,*,*
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,*,*,*,*,*,*,*,*,*
...