문자열과 일치하는 열의 열 번호

문자열과 일치하는 열의 열 번호

나는 이것이 간단해 보이지만 작동하도록 할 수 없거나 기능 옵션을 찾을 수 없다는 것을 알고 있습니다.

Linux UBUNTU 운영 체제, bash 스크립트

문자열을 기준으로 열 번호를 식별해야 합니다. (검색할 열 수는 항상 다릅니다.)

입력 예:

STRING="Boo"
Hi Boo Jiggy

예제 출력:

2

답변1

awk를 사용하세요:

$ string=Boo
$ echo 'Hi Boo Jiggy' | awk -v b="$string" '{for (i=1;i<=NF;i++) { if ($i == b) { print i } }}'
2

검색 문자열을 awk 매개변수로 전달한 다음 입력의 각 필드를 반복합니다. 현재 필드가 검색 매개변수와 동일하면 해당 번호를 인쇄합니다.

참고: 이 방법은 여러 문자열이 있는 경우 검색하지만 하위 문자열에는 작동하지 않습니다.

답변2

사용 trgrep:

string=Boo
echo "Hi Boo Jiggy" | tr ' ' '\n' | grep -nw "$string" | cut -d':' -f1

@Jesse 버전과 달리 이 변형은 줄 인식을 지원하지 않습니다. 그래서,

echo 'Hi
Boo Jiggy' | tr ' ' '\n' | grep -nw "$string" | cut -d':' -f1

@Jesse의 버전은 1을 출력하는 반면 2를 출력합니다.
이것이 당신에게 중요한지 모르겠습니다.

답변3

방금 솔루션을 스크립트에 넣었습니다. 아마도 도움이 될 것입니다.

#!/bin/sh

[ -z "$1" ] && exit 0

value="$(head -n1 "$1" | grep -Eo '".*"')"
column="$(sed '1d' "$1" | awk '{ for (i=1;i<=NF;i++) if ($i == '$value') print i }')"

echo "Column: $column"

예:

yurij@opensuse-leap65:~/trash/awk> cat example.txt 
String="Boo"
Hi Boo Jiggy

yurij@opensuse-leap65:~/trash/awk> ./process.sh ./example.txt 
Column: 2

답변4

사용행복하다(이전 Perl_6)

~$ echo "Hi Boo Jiggy Boo" | raku -ne 'put .words.grep(/Boo/, :k);'
1 3

위의 입력은 STDIN정규식 matcher 에서 제공되고 사용됩니다 Boo. Raku 코드는 행별로 각 일치 항목의 공백으로 구분된 열을 반환합니다. 반환 시 빈 행은 해당 행에 일치 항목이 없음을 나타냅니다.

일치하는 0 인덱스 열을 반환합니다. (단일 인덱스 열을 반환하려면 .map(* + 1)코드 끝에 추가하세요.) Raku 코드에서 문자열을 추상화하려면 해당 문자열을 환경 변수로 선언하세요.

~$ echo "Hi Boo Jiggy Boo" | env string="Boo" raku -ne 'put .words.grep(/<{ %*ENV<string> }>/, :k)'
1 3

파일에도 적용됩니다:

~$ env string="Boo" raku -ne 'put .words.grep(/<{ %*ENV<string> }>/, :k)' Hi_Boo_Jiggy_Boo.txt
1 3

마지막으로, 행당 일치 항목이 하나만 있다고 확신하거나 일치하는 첫 번째 열만 반환하려는 경우 .[0]코드 끝에 색인( 또는 )을 추가하세요.[0]

https://www.nntp.perl.org/group/perl.perl6.users/2020/07/msg9004.html
https://raku.org

관련 정보