두 번째 열 "이름"을 수정하고 이름 사이의 공백을 모두 제거하고 나머지 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