파일 이름 및 파일 내용에서 정보 추출

파일 이름 및 파일 내용에서 정보 추출

나는 숫자만 포함된 여러 개의 파일을 생성했습니다. 그런 다음 각 파일 이름에 이러한 파일에 대한 정보가 있습니다. 내가 원하는 것은 모든 파일 내용을 새 파일의 하나의 열로 수집한 다음 각 파일 이름의 일부를 이 새 파일의 별도 열로 만드는 것입니다.

파일 이름은 다음과 같습니다. traj-num1-iter-num2-states-num3.gradient여기서 num1, num2 및 num3은 서로 다른 숫자입니다. 내가 원하는 것의 예:

$ cat traj-10-iter-220-states-01.gradient
-0.0014868599999999788

$ cat newfile
traj    iter     states    gradient
10      220      01        -0.0014868599999999788

이것이 가능하다고 생각하지만 방법을 모르겠습니다.

답변1

AWK FILENAME변수 사용:

awk 'BEGIN { OFS = "\t"; print "traj", "iter", "states", "gradient"; FS="-|\\." } { gradient=$0; $0=FILENAME; print $2, $4, $6, gradient }' traj-*-iter-*-states-*.gradient

요청의 헤더 라인이 출력된 후 각 traj-*-iter-*-states-*.gradient파일이 처리되어 파일 이름과 해당 내용에서 추출된 값이 출력됩니다.

다음 변형은 다음을 기반으로 합니다.제안통과올리비에 뒤라크, 파일 이름에서 헤더 행을 추출하고 더 간단한 버전을 사용하십시오 FS.

awk 'BEGIN { OFS = "\t"; FS="[-.]" } { contents=$0; $0=FILENAME; if (!header) { print $1, $3, $5, $7; header=1 }; print $2, $4, $6, contents }' traj-*-iter-*-states-*.gradient

관심 있는 파일과 일치하도록 마지막에 glob을 변경할 수 있으며 헤더가 조정됩니다(처리된 첫 번째 파일에 맞춰 조정).

관련 정보