파일의 매개변수 값을 바꾸고 여기에서 매개변수 파일을 생성합니다.

파일의 매개변수 값을 바꾸고 여기에서 매개변수 파일을 생성합니다.

awk첫 번째 줄에는 매개변수 이름이 있고 다음 줄에는 값이 포함된 테이블이 포함된 파일이 있습니다. 또는 쉘 스크립트 유틸리티를 사용하여 다음을 수행하는 방법 sed:

  • fileXX각 줄의 이름이 지정된 구성 파일을 생성합니다.
  • 생성된 각 구성 파일의 각 열 값을 한 줄(행)로 바꿉니다.
  • 각 파일에서 매개변수 이름을 나타내는 첫 번째 행을 전치된 열 값에 연결하여 매개변수 이름-값 쌍으로 표시합니다.

소스 파일:

Column1     Column2      Column3  
Row1_Col1   Row1_Col2   Row1_Col3  
Row2_Col1   Row2_Col2   Row2_Col3  
Row3_Col1   Row3_Col2   Row3_Col3  

결과물 파일:

  • 파일 1

    Column1=Row1_Col1  
    Column2=Row1_Col2  
    Column2=Row1_Col3  
    
  • 파일 2

    Column1=Row2_Col1  
    Column2=Row2_Col2  
    Column2=Row2_Col3  
    
  • 파일 3

    Column1=Row3_Col1  
    Column2=Row3_Col2  
    Column2=Row3_Col3  
    

답변1

엄격한 입력 유효성 검사가 포함된 명령이 내장된 GNU datamash(새로운 명령줄 프로그램)를 사용할 수 있습니다 .transpose

예:

$ cat in.txt
Column1     Column2     Column3
Row1_Col1   Row1_Col2   Row1_Col3
Row2_Col1   Row2_Col2   Row2_Col3
Row3_Col1   Row3_Col2   Row3_Col3

$ datamash transpose < in.txt
Column1 Row1_Col1   Row2_Col1   Row3_Col1
Column2 Row1_Col2   Row2_Col2   Row3_Col2
Column3 Row1_Col3   Row2_Col3   Row3_Col3

그런 다음 열로 나눕니다 cut.

$ datamash transpose < in.txt | cut -f1,3 | tr '\t' '='
Column1=Row2_Col1
Column2=Row2_Col2
Column3=Row2_Col3

여러 파일을 생성하려면 다음 명령을 사용할 수 있습니다.

for i in 2 3 4 ; do
   datamash transpose < in.txt | cut -f1,$i | tr '\t' '=' > file$i.txt
done

GNU Datamash는 여기에서 구할 수 있습니다:http://www.gnu.org/s/datamash, 패키지는 여러 gnu/linux 배포판에서 사용할 수 있습니다(면책조항: 저는 datamash개발자입니다).

답변2

awk를 사용하여 이 작업을 수행할 수 있습니다.

{
  # extract files names form first line
  if (1 == NR) {
    num_fields = NF       
    for(i = 1; i <= num_fields ; i++)
    {
      # get line header
      header[i] = $i
      # create file name
      file[i] = "file-"i
    }
  }
  else 
  {
    # extract data if not first line
    for (i = 1; i <= num_fields; i++)
    {
      print header[i] ":" $i > file[i]
    }          
  }
}

다음을 통해 호출하세요.

awk -f script.awk file_to_process

답변3

src=/the/source/file
set -- `head -1 $src`;
col1=$1 ; col2=$2 ; col3=$3; i=0;
grep -v "`head -1 $src`" $src | while read c1 c2 c3
  do
    echo -e "$col1=$c1\n$col2=$c2\n$col3=$c3" > file-$((i=i+1)).out ; 
  done

시험

$ cat $src
Column1     Column2      Column3  
Row1_Col1   Row1_Col2   Row1_Col3  
Row2_Col1   Row2_Col2   Row2_Col3  
Row3_Col1   Row3_Col2   Row3_Col3
$ set -- `head -1 $src`; i=0; col1=$1 ; col2=$2 ; col3=$3; i=0; grep -v "`head -1 $src`" $src | while read c1 c2 c3 ; do echo -e "$col1=$c1\n$col2=$c2\n$col3=$c3\n" > file-$((i=i+1)).out ; done
$ cat file-1.out 
Column1=Row1_Col1
Column2=Row1_Col2
Column3=Row1_Col3
$ cat file-2.out 
Column1=Row2_Col1
Column2=Row2_Col2
Column3=Row2_Col3
$ cat file-3.out 
Column1=Row3_Col1
Column2=Row3_Col2
Column3=Row3_Col3
$ 

관련 정보