awk를 사용하여 특정 열에서 공백을 제거하는 방법

awk를 사용하여 특정 열에서 공백을 제거하는 방법

두 번째 열 "이름"을 수정하고 이름 사이의 공백을 모두 제거하고 나머지 txt 파일은 변경하지 않고 그대로 두고 인쇄하고 싶습니다.

이것은 내 입력입니다(탭으로 구분된 필드).

Roll NO Name         RandomColumn1    RandomColumn2 
1       Jason James  my value        my val 3

내가 원하는 출력:

Roll NO Name        RandomColumn1  RandomColumn2 
1       JasonJames  my value        my val 3

내가 성공하지 못한 채 사용한 명령은 다음과 같습니다.

 awk '{$3=$4;  print }' | sed "s/^ *//"

답변1

awk 'BEGIN{ FS=OFS="\t" }{ gsub(" ", "", $2) }1' infile

FS는 입력 필드 구분 기호입니다. OFS는 출력 필드 구분 기호입니다. 둘 다 tabs로 설정되어 있으며 \t두 번째 필드의 모든 공백 문자를 제거하고 최종 업데이트를 인쇄합니다.이것1사용된.

답변2

고용GNU sed확장 정규식 모드에서는 -E표시된 대로 수행할 수 있습니다. 두 번째 필드는 먼저 \n패턴 공간에 존재하지 않는 것으로 알려진 토큰( )으로 구분됩니다. 그런 다음 루프에서 이러한 마커 사이의 공간을 선택하고 루프 뒤의 필드 구분 기호에 시장을 복원합니다.

sed -Ee '
  s/\t/\n/;s//\n/;ta
  :a
    s/(\n.*) (.*\n)/\1\2/
  ta
  y/\n/\t/
' file

우리는 사용할 수 있습니다파이썬 3원하는 출력을 얻기 위한 중첩된 목록 이해:

python3 -c 'import sys
ifs,ors,ifile = "\t", "\n",sys.argv[1]
spc,ofs = " ",ifs
with open(ifile) as f:
  print(*[ofs.join([f1,f2.replace(spc,""),f3_])    
for l in f for f1,f2,f3_ in [l.rstrip().split(ifs,2)]],sep=ors)
' file

perl -F'\t' -pale '
  substr($_,1+index($_,"\t$F[1]"),length($F[1])) =~ tr/ //d;
' file

답변3

주문하다

awk 'NR>1{$2=$2$3;$3=" "}1' filename

산출

Roll NO Name         RandomColumn1    RandomColumn2 
1       JasonJames   my value          my val 3

관련 정보