파이프(|)로 구분된 데이터가 포함된 폴더가 있습니다. 파일 이름과 함께 폴더에 있는 각 파일의 첫 번째 줄의 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)"
' {} {} \;