폴더의 모든 파일에서 데이터 찾기

폴더의 모든 파일에서 데이터 찾기

파이프(|)로 구분된 데이터가 포함된 폴더가 있습니다. 파일 이름과 함께 폴더에 있는 각 파일의 첫 번째 줄의 8번째 열 목록을 원합니다. 이 모든 데이터를 하나의 파일로 결합할 수 있다면 좋을 것입니다.

답변1

파일을 전송하려면 awk쉘 globstar를 사용할 수 있습니다. 우리에게 필요한 -F필드 구분 기호를 정의하는 데 사용할 수 있습니다 . -F'|'첫 번째 행만 가져오는 경우에는 다음을 사용하는 것으로 nextfile충분합니다. 그래서 우리는 이렇게 할 수 있습니다:

awk -F'|' '{print FILENAME,$8;nextfile}' ./*

파일이 있는 폴더에서.

nextfile지원되지 않을 수 있다는 점 참고하시기 바랍니다 . 예를 들어, Stephane이 지적했듯이 데비안과 그 파생 제품은 옵션이 mawk없는 이전 버전과 함께 제공됩니다 nextfile. 더 이식 가능한 awk 코드가 필요한 경우 변수를 활용할 수 있습니다 FNR. 예를 들어:

awk -F'|' 'FNR==1{print FILENAME,$8}'  ./*

답변2

나는 아직도 선호하지만awk방법(더 명확하고, 더 쉘 유사하고, 더 효율적입니다.) 쉘 루프를 사용하는 것이 상대적으로 잘 작동하는 상황입니다.

for file in *; do
  IFS='|' read -r x x x x x x x text x < "$file" || continue
  printf '%s\n' "$file: $text" || exit
done

답변3

find . ! -name . -prune -exec test -f {} \; -exec sh -c '
   printf "%s:%s\n" "$1" "$(head -q -n 1 "$1" | cut -d\| -f8)"
' {} {} \;

관련 정보