열 기반 텍스트 파일에서 값 찾기 및 삽입

열 기반 텍스트 파일에서 값 찾기 및 삽입

성가신 문제가 있습니다. 오랫동안 존재하지 않는 은퇴 금융 시스템에서 내보낸 오래된 텍스트 파일이 있습니다. 일부 데이터 행이 손상되어 잘못된 열에 값이 표시됩니다.

예:

123     99999 
123     87675 
65453   62 
123     64534

첫 번째 열의 값에는 5개의 숫자가 포함되어서는 안 되며, 두 번째 열에는 항상 5개의 숫자가 포함되어야 합니다.

지금까지 문제가 있는 줄을 찾는 방법을 알아냈습니다.

cat tempfile | grep -n '^[0-9][0-9][0-9][0-9][0-9]'

위와 같이 문제가 있는 줄의 줄번호를 찾는 방법을 찾고 싶습니다.

65463     62

....그런 다음 "123"과 공백 또는 탭을 삽입하여 다음과 같이 만듭니다.

123     65463     62 

가능한 가장 간단한 방법으로, 바람직하게는 Bash에서 이를 수행하는 방법입니다.

폴 인사말

답변1

awk여기에 매우 적합

$ awk 'length($1)>3{$0 = "123\t" $0} 1' ip.txt
123     99999
123     87675
123     65453   62
123     64534
  • length($1)첫 번째 필드의 길이를 제공합니다.
  • $0 = "123\t" $0이 줄의 내용은 필요에 따라 변경됩니다.
  • 1콘텐츠를 인쇄하는 관용적인 방법$0

답변2

sed -r 's/^[0-9]{5}/123\t&/' yourfile

전체 일치 문자열을 나타내 &려면 특수 문자를 사용하십시오 .sed

특히 이 예에서 sed -r확장 정규식을 활성화하는 데 사용합니다 .{ }

관련 정보