각 줄에 다른 접두사를 어떻게 추가할 수 있나요?

각 줄에 다른 접두사를 어떻게 추가할 수 있나요?

목록/텍스트 파일(파일)에 파일이 있습니다.테스트.txt).

예를 들어:

smith
johnson
west

각 문자를 각 줄의 접두어로 추가하고 새 텍스트 파일로 출력하려면 어떻게 해야 합니까?

원하는 출력:

asmith
bsmith
csmith
dsmith
...
ajohnson
bjohnson
cjohnson
etc., etc.

답변1

사용 awk:

awk '{ for (asc=97; asc<=122; asc++)printf ("%c%s\n", asc, $0) }' infile

우리는 printf와 그것의 %c(문자 변환 수정자를 사용했습니다.인간의 awk(자세한 내용 알아보기) ASCII 소문자 영어 문자를 인쇄합니다. ASCII 코드: 97(문자 a)로 시작하고 ASCII 코드:122(문자 z)로 끝나고 그 뒤에 현재 줄 자체가 옵니다.ASCII 테이블 참조.

답변2

다음과 같은 것이 트릭을 수행합니다.

while IFS= read -r i; do
  for j in {a..z}; do
    echo "${j}${i}"
  done
done < input_file > new_text_file
# use `>> new_text_file` to append instead of overwrite

루프는 while파일에서 이름을 읽고, for루프는 a에서 z까지의 문자를 생성합니다. 이 echo명령은 a부터 z까지의 문자를 파일에서 읽은 이름과 연결합니다.

답변3

join존재하지 않는 열을 조인하여 교차 조인을 만들려면 이 유틸리티를 사용하십시오.

join -1 2 -2 2 -o 2.1,1.1 file <( printf '%s\n' {a..z} ) | sed 's/\(.\) /\1/'

또는 절차적 대체 없이:

printf '%s\n' {a..z} | join -1 2 -2 2 -o 2.1,1.1 file - | sed 's/\(.\) /\1/'

마지막 것은 sed두 개의 출력 열 사이의 공간을 제거합니다 join.

이 명령은 join가입을 지정하는 옵션을 사용합니다.두번째각 파일의 열( -1 2합계 )입니다 -2 2. 열이 존재하지 않으므로 "all-vers-all" 효과를 얻습니다. 이 -o옵션과 해당 옵션 인수는 출력 형식을 지정합니다. 첫 번째 파일의 데이터보다 두 번째 파일의 데이터를 가져옵니다 -o 2.1,1.1("두 번째 파일의 첫 번째 열, 그 다음에 첫 번째 파일의 첫 번째 열").

출력은 다음과 같습니다

asmith
bsmith
csmith
dsmith
esmith
fsmith

etc.

답변4

신청 가능Brace Expansion

eval printf "'%s\n'" "{a..z}{$(paste -sd, file)}"

eval명령을 실행한 후 다음과 같은 결과를 얻습니다.

printf '%s\n' {a..z}{smith,johnson,west}

고쳐 쓰다:

eval printf "'%s\n'" "{$(paste -sd, file)}\ {a..z}" | column -to '' -O2

-O2- 수도 o. 열의 출력 순서입니다. 두 번째 열부터 시작하세요.

관련 정보