줄의 네 번째 단어를 가져와서 줄의 시작 부분에 복사해야 합니다(sed awk).

줄의 네 번째 단어를 가져와서 줄의 시작 부분에 복사해야 합니다(sed awk).

500만 줄의 파일이 있습니다.

xx ss ss "abcde"

"abcde"이것을 각 줄의 시작 부분에 복사 해야 합니다 .

"abcde" xx ss ss "abcde"

문자열은 "abcde"줄마다 바뀌므로 특정 단어는 아니지만 항상 각 줄의 네 번째 단어입니다.

답변1

또 다른 이상한:

awk '{print $4,$0}' file

시험:

$ cat file7
abc def ghi nop
klm one two three
four five six nine

$ awk '{print $4,$0}' file7
nop abc def ghi nop
three klm one two three
nine four five six nine

답변2

의 경우 sed열이 여러 공백으로 구분되어 있고 추가 열이 있을 수 있다고 가정합니다.

sed 's/\([^ ]* *\)\{3\}\([^ ]*\)/\2 &/'

이 패턴은 공백이 아닌 것으로 식별되는 세 개의 반복 열과 일치하며 그 뒤에는 공백, 그 뒤에 \2대체 문자열에 인용된 다른 열이 옵니다. 전체 일치 항목을 대체 항목에 추가 하면 &행의 나머지 전체 앞에 네 번째 열이 삽입됩니다.

이 방법은 4개 이상의 열에서 작동하지만 네 번째 열이 없으면 실패합니다.

확장 정규 표현식을 사용할 수 있는 경우에도 동일합니다(FreeBSD 또는 GNU sed):

sed -E 's/([^ ]* *){3}([^ ]*)/\2 &/'

답변3

여기에 더 나은 답변이 있지만 다음은 작동하는 for in 루프도 있습니다.

IFS=$'\n'; for i in $(cat file); do var=$(echo $i | awk '{print $4}')  ; sed -i "s/.*$var/$var &/g" file ;done

답변4

네 번째 필드를 목록 구분 기호 (기본값 ) $F[3]와 함께 레코드/행의 시작 부분에 배치합니다 . 이 옵션은 기록됩니다.$"space-pautoprint

perl -pale 's/^/$F[3]$"/' yourfile

sed 명령을 사용하여 원본 파일의 복사본을 저장하고 네 번째 필드를 분리합니다. 그런 다음 주요 부분을 제거합니다. 이제 네 번째 필드가 포함된 패턴 공간에 추가하여 원래 상태를 복원합니다.

sed -e '
   /\n/!h
   //!s/\S\+/\n&\n/4
   /\n.*\n/D
   s/\n.*//;G;s/\n/ /
' yourfile

관련 정보