파일 이름을 바꾸는 데 사용되는 CSV 파일의 첫 번째 줄(또는 그 이상 줄) 건너뛰기

파일 이름을 바꾸는 데 사용되는 CSV 파일의 첫 번째 줄(또는 그 이상 줄) 건너뛰기

csv 파일의 정보를 사용하여 파일 이름을 바꿀 수 있는 Stack Exchange의 다른 질문에 있는 정보를 사용했습니다. 이 줄을 사용하면 열 1의 이름에서 열 2의 이름으로 모든 파일의 이름을 바꿀 수 있습니다.

while IFS=, read -r -a arr; do mv "${arr[@]}"; done <$spreadsheet 

그러나 맨 위 행의 정보를 비교하려고 시도합니다. 줄을 건너뛸 수 있는 코드를 포함하고 싶습니다. 위의 코드 줄이 어떻게 작동하는지 더 잘 이해하는 것이 좋을 것입니다. 나는 그것이 열(예: A와 B)에 대한 일부 정보를 포함할 것이라고 생각했습니다.

답변1

이 시도:

tail -n +2 $spreadsheet | while IFS=, read -r -a arr; do mv "${arr[@]}"; done

tail 명령은 파일의 마지막 몇 줄만 인쇄합니다. "-n +2"를 사용하면 두 번째 줄부터 시작하여 파일의 마지막 줄을 모두 인쇄합니다.

while 루프에 대해 자세히 알아보세요. mvwhile 루프는 새 줄을 사용할 수 있을 때마다 명령을 실행합니다. 이는 while 루프의 조건문을 사용하여 수행됩니다.

IFS=, read -r -a arr

arr위 작업은 IFS(필드 구분 기호)가 쉼표인 배열로 행을 읽어옵니다 . 이 -r옵션은 필요하지 않을 수도 있습니다.

그런 다음 mv명령을 실행하면 "${arr[@]}"가 필드 목록으로 변환됩니다. 여기서 각 필드는 큰따옴표로 구분됩니다. 귀하의 경우 행당 필드가 두 개뿐이므로 해당 두 필드로만 확장됩니다. "${arr[@]}"는 매뉴얼에 설명된 대로 배열에 대한 bash의 특별 규칙입니다.

   Any element of an array may be referenced using ${name[subscript]}.  The braces are
   required  to  avoid conflicts with pathname expansion.  If subscript is @ or *, the
   word expands to all members of name.  These subscripts differ only  when  the  word
   appears  within double quotes.  If the word is double-quoted, ${name[*]} expands to
   a single word with the value of each array member separated by the first  character
   of the IFS special variable, and ${name[@]} expands each element of name to a sepa-
   rate word.  When there are no array members, ${name[@]} expands to nothing.  If the
   double-quoted  expansion occurs within a word, the expansion of the first parameter
   is joined with the beginning part of the original word, and the  expansion  of  the
   last  parameter  is joined with the last part of the original word.  This is analo-
   gous to the expansion of the special parameters * and  @  (see  Special  Parameters
   above).   ${#name[subscript]} expands to the length of ${name[subscript]}.  If sub-
   script is * or @, the expansion is the number of elements in the array.   Referenc-
   ing  an  array  variable  without  a subscript is equivalent to referencing element
   zero.

관련 정보