2012-10-13 4 views
1

탭으로 구분 된 파일이 있습니다. 다시 포맷하고 원본을 모두 한 줄로 삭제하고 싶습니다.linux 명령을 사용하여 열을 제거하고 id 열을 추가 한 다음 추가 열을 추가합니다. unix/linux awk

이 탭으로 구분 된 파일을, 나는에 예를 들어 좋아하는 것입니다 :

(즉, 열 3), 가 (중간에 다른 ID 열을 추가 주어진 열을 제거 즉, BTW 열 1 2) 각 행은 id입니다 (예 : row1은 id1, row2는 id2 등 ...). 그리고 나서 끝에 다른 열을 텍스트 (즉, 각 행이 안녕하세요 텍스트)로 추가하십시오.

모든 내용이 한 줄로 변경되고 마지막으로 원본 파일이 삭제되고 원래 파일과 동일한 새 파일이 삭제됩니다.

예 :

fnamein.txt

rogelio\tdelgado\t3453434\tlas encinas\n 
mario\tmoreno\t4563432\tcasinos\n 
etc... 


fname.out 내가 이드 컬럼 BTW 1 내지 컬럼 첨가 볼 수

rogelio\tid1\tdelgado\t3453434\tlas encinas\taddress\n 
mario\tid2\tmoreno\t4563432\tcasinos\taddress\n 
etc... 

(및 2, 주소 열 (항상 같은 단어) nd).

리눅스에서 쉽게 할 수있는 방법이 있는지 궁금합니다. 저는 리눅스 명령의 힘을 처음 접했습니다.

감사합니다.

+1

원본 파일의 한 줄 (또는 두 줄)을 입력 한 다음 수정 후 새 파일의 모양을 표시 할 수 있습니까? – newfurniturey

답변

2

다른 방법은 -F는 필드 분리이다 AWK

awk -F'\t' '{print $1, $2, $3}' filename 

을 사용하는 것이다. awk는 파일을 각각의 필드로 분리하므로 필드를 인쇄하면됩니다. $ 1은 첫 번째 필드입니다. 필드를 건너 뛰려면 생략하십시오.

awk '{print $1, $3}' filename 

은 첫 번째와 세 번째 필드 만 인쇄합니다.

+0

감사합니다. 거의 부분적인 대답이지만, 행 1은 id1, 행 2는 id2 등등 ... id가있는 열을 어떻게 추가할까요? 원본 파일을 지우고 새 파일로 대체하는 방법도 있습니다. 같은 줄에? – Dnaiel

+0

나는 대부분을 수정했지만 어떻게 같은 이름의 파일에 한 줄에 저장 했나요? awk -F '\ t' '{id ++}'{print $ 1, "id", $ 2, $ 3, "address"} 'filenamein.txt> filenamein.txt를 시도하면 filenamein.txt는 비어 있습니다. .. 어떤 아이디어? – Dnaiel

+0

awk '스크립트'파일> tmp && mv tmp 파일 –

1

한가지 방법은 :

perl -i -pwe 's/^([^\t*])\t([^\t*])\t[^\t*]\t(.*)/$1\tid$.\t$2\t$3\taddress/;' FILENAME 
+0

perl은 과잉이다, regexp는 과잉이다 –

+0

내가 아는 한 펄은 리눅스의 일부가 아니다 – pedrofurla

1

잘 대답 unixrules 전체 질문에 대답하는 나에게 도움이 :

를 AWK -F '\ t' 'BEGIN {OFS의 =의 FS} {ID ++} {$ 1 인쇄 "ID"ID, $ 2, $ 3 $ 4, "address"} 'filein.txt> test.tmp & & mv test.tmp filein.txt.

이 답변은 내가 원래 의도 한 것입니다.

귀하의 도움에 감사드립니다.

관련 문제