행의 모든 값을 N/A로 변경하는 방법을 알아보려고 합니다. 예를 들어. 모든 열에서 행 77 132 140 142 155 156 157 및 175를 N/A로 바꿔야 합니다. 예를 들어:
RS,RPHG,LPHG,RITC
13.7801604545457,3.10785528409178,-38.443658181819,-8.25890473295385
-12.5663095454547,-33.8395547159089,-3.44606818181819,-24.8157817329538
35.1140204545463,-35.4853647159089,-33.8231881818192,26.6855902670459
-29.9357495454533,-34.5783047159075,-50.3323381818191,2.0808182670462
답변1
$ awk -F, -vOFS=, 'FNR==2 || FNR==4 { for (i=1;i<=NF;++i) $i="N/A" } 1' file
RS,RPHG,LPHG,RITC
N/A,N/A,N/A,N/A
-12.5663095454547,-33.8395547159089,-3.44606818181819,-24.8157817329538
N/A,N/A,N/A,N/A
-29.9357495454533,-34.5783047159075,-50.3323381818191,2.0808182670462
FNR
현재 파일에 있는 현재 레코드의 일련 번호입니다("현재 파일의 줄 번호"). 2개 또는 4개인 경우 모든 필드(1부터 NF
필드 수 까지)를 반복하고 각 필드를 string 으로 설정합니다 N/A
. 1
끝에 있는 후행은 { print }
모든 행(수정 또는 수정되지 않음)이 인쇄되도록 하는 짧은 쓰기 방법입니다.
제거해야 할 모든 줄 번호(줄당 하나의 번호)가 포함된 첨부 파일이 있는 경우:
awk -F, -vOFS=, 'FNR==NR { a[$1]; next }
FNR in a { for (i=1;i<=NF;++i) $i="N/A" } 1' lines file
lines
줄 번호가 있는 파일은 어디에 있습니까?
여기서 FNR==NR
우리가 읽고 있다면첫 번째문서 ( lines
문서). 이 경우 행 번호를 입력하여 배열에 항목을 만들고 a
다음 행으로 진행합니다. NR
~이다모두FNR
지금까지 읽은 줄 수는 두 번째 파일에서 읽기를 시작하기 전의 줄 수 와 같습니다 .
FNR
같지 않다면 우리 NR
는 읽고 있습니다.두번째파일( file
데이터가 포함된 파일). 그런 다음 현재 행 번호가 배열의 키인지 테스트하고 a
, 그렇다면 이전과 같이 모든 필드를 바꿉니다 N/A
.
답변2
한 가지 방법은 다음과 같습니다 sed
.
sed '
77c\
N/A,N/A,N/A,N/A
132c\
N/A,N/A,N/A,N/A
140c\
N/A,N/A,N/A,N/A
142c\
N/A,N/A,N/A,N/A
155c\
N/A,N/A,N/A,N/A
156c\
N/A,N/A,N/A,N/A
157c\
N/A,N/A,N/A,N/A
175c\
N/A,N/A,N/A,N/A
' input.csv
답변3
두 줄의 필터링을 사용하여 awk
시연합니다 .
awk 'BEGIN { FS=","; OFS="," } { if( NR == 77 || NR == 132 ) {for( i=1; i<=NF; i++) {$NF="N/A"} }; print }' input
if
모든 관련 행에 대해 명령문에 더 많은 옵션을 추가하기만 하면 됩니다.
답변4
사용 awk
:
awk -vOFS=, '{
if (NR==77 || NR=132 || NR==140 || NR==142 || NR==155 || NR==156 || NR==157 || NR==175)
$1=$2=$3=$4="N/A"
print
}' input.csv
출력으로 새 파일을 생성하려면 쉘 >
리디렉션 연산자를 사용하면 됩니다.
awk -vOFS=, '{
if (NR==77 || NR=132 || NR==140 || NR==142 || NR==155 || NR==156 || NR==157 || NR==175)
$1=$2=$3=$4="N/A"
print
}' input.csv > newfile.csv