특정 열의 내용을 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.