일련번호가 있는 파일을 읽는 경우

일련번호가 있는 파일을 읽는 경우

echo 명령을 사용하여 파일에 쓰고 싶습니다. echo 명령은 다른 파일에서 데이터를 가져옵니다.

이것은 에코 명령입니다:

echo '{
       name: $name
       id: $seq
       }

txt 파일이 있습니다.

customer 1
customer 2
customer 3

그래서 파일을 생성하고 echo를 수행하고 txt 파일의 첫 번째 줄에서 $name을 바꾸려고 합니다.

그런 다음 $seq의 시작 부분을 1로 바꿉니다.

제가 원하는 파일입니다.

{
       name: customer 1
       id: 1
       }
{
       name: customer 2
       id: 2
       }
{
       name: customer 3
       id: 3
       }

첫 번째 행을 읽을 때 ID는 1이어야 하고 두 번째 행을 읽을 때 ID는 2여야 합니다.

답변1

노력하다

 awk '{printf "{\n\tname: %s\n\tid: %d\n\t}\n",$0,NR}' file.txt

어디

  • printf줄을 건너뛰고 탭과 형식 문자열이 추가됩니다.

매개변수 의 경우 id:예제 파일의 두 번째 필드를 사용하거나 NR줄 번호(즉, (레코드 수) 값)에서 필드를 생성할 수 있습니다.

답변2

올바른 JSON 형식의 출력을 원하는 경우:

jq -Rs 'split("\n") |
        .[0:-1]     |
        [ foreach .[] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file

아니면 더 짧게,

$ jq -Rs '[ foreach split("\n")[0:-1][] as $customer ( 0; .+1; { name: $customer, id: . } ) ]' ./file

-Rs형식화되지 않은 원시 텍스트를 단일 문자열로 읽습니다 . 이는 newlines 에서 배열을 분할 split("\n")하고 배열 끝에 null 값이 있으므로 이를 제거합니다 .[0:-1](이렇게 하면 첫 번째부터 두 번째, 마지막까지 모든 요소가 선택됩니다).

질문과 동일한 입력 데이터를 사용하여 이제

[
  "customer 1",
  "customer 2",
  "customer 3"
]

$customer그런 다음 각 요소와 반복자를 사용하여 해당 배열의 값을 반복하고 그에 따라 및 키를 사용하여 .개체 배열을 구성합니다 .nameid

밝혀지다

[
  {
    "name": "customer 1",
    "id": 1
  },
  {
    "name": "customer 2",
    "id": 2
  },
  {
    "name": "customer 3",
    "id": 3
  }
]

관련 정보