성가신 문제가 있습니다. 오랫동안 존재하지 않는 은퇴 금융 시스템에서 내보낸 오래된 텍스트 파일이 있습니다. 일부 데이터 행이 손상되어 잘못된 열에 값이 표시됩니다.
예:
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
확장 정규식을 활성화하는 데 사용합니다 .{ }