특정 열의 내용을 awk로 바꾸는 방법은 무엇입니까?


31

주어진 : 레코드에 40 개의 열이 있습니다. 35 번째 열이 35 번째 열의 내용과 "$"기호로 바뀌도록 35 번째 열을 바꾸고 싶습니다. 생각 나는 것은 다음과 같습니다.

awk '{print $1" "$2" "...$35"$ "$36...$40}'

작동하지만 열 수가 10k 이상이면 실행할 수 없기 때문에 작동합니다. 이 작업을 수행하는 더 좋은 방법이 필요합니다.

답변:


35

당신은 이렇게 할 수 있습니다 :

awk '$35=$35"$"'

8

더 효율적인 방법이있을 것입니다. 그 경고와 함께 :

awk '{$35 = $35"$"; print}' infile > outfile

3

필드 구분자가 <space>다음과 같은 경우 :

sed 's/  */$&/35'

필드 구분 기호는 알 수없는 경우 :sed 's/./$&/35'
— 언더 벌스

@ Underverse-나는 그것이 같은 것이라고 생각하지 않습니다. 그것은 입력 줄에서 35 번째 문자 앞에 문자가 있어야합니다 $. 위의 것은 $각 필드에 문자가 어떻게 있든 상관없이 35 번째 필드에 35 문자를 포함해야합니다 (즉, 35 번째 필드).
— mikeserv

아, "레코드에 40 개의 열". 나는 문자 그대로 '텍스트 파일의 35 번째 문자 열'로 '35 번째 열 '을 읽습니다.
— Under

3

원래 Field-Seprator를 예약하기 위해이 작업을 수행했습니다. 비우고 싶은 열은 12 달러였습니다.

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

을 사용 gawk -i하면 파일을 편집 할 수 있습니다.


1

"승인 된"답변을 사용하는 데 문제가 있으면 파일의 첫 번째 열 이상을 대체하게됩니다. 이 일반 명령을 사용합니다.

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

어디에:

  • [column] = 1부터 시작하여 변경하려는 열 (0 아님)
  • [replace] = 바꾸려는 텍스트

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... 몇 초 안에 백만 개의 타임 스탬프를 교체했습니다 !! :)
— roblogic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.