탭으로 구분된 파일의 열을 기반으로 새 줄 추가

탭으로 구분된 파일의 열을 기반으로 새 줄 추가

다음과 같이 탭으로 구분된 파일이 있습니다.

211845  032
215979  002   071
217783  143   156   169
219750  111

탭으로 구분된 여러 항목이 있는 행의 경우 첫 번째 열의 값을 기반으로 새 행을 추가하고 싶습니다. 이것이 내가 원하는 결과입니다:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

어떤 아이디어라도 주셔서 감사합니다. 이 아이디어로 인해 당황했습니다.

답변1

, 를 사용하여 awk각 줄의 첫 번째 필드 뒤의 필드를 반복하고 각 필드에 대해 새 줄을 인쇄합니다.

awk -F'\t' -v OFS='\t' '{for (i=2;i<=NF;i++) print $1,$i}' file

산출:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

이렇게 하면 빈 행이나 필드가 하나만 있는 행을 삭제할 수 있습니다. 이는 아마도 원하는 것일 것입니다. 현재 상태로 유지하려면 다음과 같이 수정하면 됩니다.

awk -F'\t' -v OFS='\t' 'NF<2 {print; next} {for (i=2;i<=NF;i++) print $1,$i}' file

답변2

GNU sed-E읽기 쉬운 정규식을 작성하는 데 도움이 되는 확장 정규식 모드를 사용하면 이 작업을 수행할 수 있습니다 .

sed -E '
  s/\t/\n/2;T
  s/^([^\t]+\t).*\n/&\1/
  P;D
' file

산출:

211845  032
215979  002
215979  071
217783  143
217783  156
217783  169
219750  111

  • 줄에 탭 문자가 2개 미만인 경우 T 명령을 사용하여 그대로 표시합니다.
  • P 명령을 사용하여 첫 번째 쌍을 표시하고 첫 번째 쌍 뒤에 첫 번째 필드를 연결합니다.
  • 이 프로세스는 탭이 남을 때까지 계속되며, 그런 다음 첫 번째 단계를 통해 인쇄합니다.

관련 정보